humangas's blog

自分用のメモなので雑です。

2014-02-04_NUCON(あのBacklog,Cacooのヌーラボのカンファレンス)に行って来た。

ヌーラボカンファレンスのメモ。


基本情報


聞いたセッション


基調講演

  • 会社紹介:社員22名、世界中にある、コラボレーションサービス使ってる会社
  • プロダクト紹介:Backlog、Cacoo、Typetalk
  • ルーラボアカウント:ヌーラボサービスを一つのアカウントでSSO出来る

会社紹介

  • 本社:福岡、他も一杯ある。全部で6個(海外も)
  • 社員数:22名
  • コラボレーションサービスを開発・運用している会社

Backlog:プロジェクト管理ツール

  • もう、7年ぐらい運用してる
  • 20万アカウント、10万プロジェクト
  • 5つの言語に対応している
  • 日本語、中国語、Englishなど

Cacoo:お絵かき出来る

  • 110万アカウント、400万シート
  • 海外ユーザ多し(内訳:14%=Japan、残り86%=日本以外、米国が一番で13%)
  • Cacoo Enterprize Edtionユーザ例:ディー・エヌ・エー、クックパッド、DMM.com
  • SDK Edition(ADFlowさんが使ってる)

Typetalk:リアルタイムチャット

  • プロダクトオーナーがプレゼン
  • コンセプト:「Typetalkで、チームでのチャットはもっと楽しくなれる。」
  • World Cafeというディスカッション方式を通じて得た体験をツールへ。=Typetalkの原点
  • 2011/10 Prototypeを作った(最新技術も取り入れた何かを)
  • → 個人的に会社の中にオープンした→ 社内から色々な意見が来た(業務外時間でコツコツ)
  • そんな中、Singapore起ち上げに参加。エンジニア一人しかいないので、さらにリモートでも出来る気軽なコミュケーションの必要性を感じた。
  • 2014/02 Typetalkローンチ

Typetalkの機能

  • Like:いいね
  • 絵文字
  • インライン表示:見た目を鮮やかに
  • まとめて共有:さっと後から確認
  • どこからでも:メンションで通知(iOS, Android)
  • APIが使える:Cacoo→ Typetalkに流したり(OAuth 2.0対応)
  • Demo:いい感じ。Likeのエフェクトが分かりやすいし、楽しい感じだ。
  • Roadmap:Backlog 連携強化、デスクトップアプリ、1対1チャット、プレミアムプラン
  • → 今はフリーで利用できる。

ヌーラボアカウント:いわゆるSSO

  • → ヌーラボが作ったサービスのアカウントを一元管理出来る
  • Roadmap:グループ管理強化、セキュリティ強化、契約管理強化、API公開したい
  • API公開:→ ヌーラボアカウントで別のサービスにログインしたり。

Git Track

  • サルでもわかるGit入門 東京出張編 〜博多弁でGitハンズオン〜
  • 山本竜三氏@ヌーラボ
  • 資料はコチラ:サルでもわかる Git 入門 東京出張編 ~ 博多弁で Git ハンズオン ~
  • サポーターの方々がサルの耳あてしてて、誰がサポーターなのか分かりやすい。
  • 博多弁に無理やりしようとしてた。時々忘れたように思い出すのがオモロかった。

バージョン管理ってなんね?

  • バックアップする
  • 変更管理する(→ 日付付きのファイルとか作らなくてよい)
  • → 一人でなく、チームで変更管理を一元管理する

用語

  • リポジトリ:=ファイルやディレクトリの状態を管理する場所(色んなデータ情報を貯めるところ)
  • コミット:=誰が、いつ、どういう変更があったか? という情報を管理する単位
  • Git:=バージョン管理システムの一つ、分散型(Subversionは集中型)
  • → 集中型:リポジトリが一つある。そこに履歴を貯めていく
  • → 分散型:リポジトリが何個もある。リポジトリが分散していて、共有したい時に共有する。
  • ワークツリーとインデックス
  • → 1回インデックスに置いてあげて、それをリポジトリに入れる

git 基本操作

  • git config:gitの設定
  • git init:gitのリポジトリ作成
  • git status:gitの今の状態知る(コミット全部されてる? されてないのは?とか)
  • git add:gitインデックス(ステージング)に入れる
  • git commit:gitローカルリポジトリにコミットする
  • git remote:ローカルとリモートリポジトリを繋ぐ設定
  • git push:ローカルの変更をリモートにあげる

こっからハンズオン

  • 基本的に、ハンズオンでやった通りに書いてる。
  • ただ、マージとかチームで開発していく上での操作は時間なくて宿題に。。

git --version

  • バージョン確認
  • → 1.8系だとこの手順通りで大丈夫でしょう。

git config

  • git 基本設定:ユーザ名・メルアド

確認方法

  • git config --global user.name
  • git config --global user.email

設定方法

  • git config --global user.name "<ユーザ名>"
  • git config --global user.email "<メールアドレス>"
  • → 設定はココから確認できる:view ~/.gitconfig

git init

自分のリポジトリ(ローカルリポジトリ)をtutorialディレクトリに作成する。

$ mkdir tutorial
$ cd tutorial
$ git init

git config user.name <ユーザ名>

リポジトリ固有のユーザ名を付ける。
git config user.name "<リポジトリ固有のユーザ名>"

$ git config user.name saruXXX
$ git config user.name
saruXXX

サンプルのテキストを作成

コミットサンプルとするファイルを作成する。

$ vi sample.txt

git status

git の今の状態を出す。
コミット出来るモンは今ない。インデックス(ステージング)にadd出来てないモンがある。

$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   sample.txt
nothing added to commit but untracked files present (use "git add" to track)

git add <ブツ>

サンプルファイルをインデックスにaddしてみる。

$ git add sample.txt

git status

git add した後のステータス。
インデックスにaddした状態にステータスが変わった。

$ git add sample.txt 
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   sample.txt
#

git commit -m <コメント>

これで、インデックスに追加したブツをコミットできた。

$ git commit -m 'first commit'
[master (root-commit) 3b16af9] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 sample.txt

git status

コミットが全部終わり、綺麗な状態でステータス見てみる。

$ git status
# On branch master
nothing to commit, working directory clean

git log

最初のコミットした状態がログとして表示されている。

$ git log
commit 3b16af9XXXXX76cXX6ae27eXXXXXf276d22eadXX6ecedd5
Author: saruXXX <メールアドレス>
Date:   Tue Feb 4 15:41:12 2014 +0900

    first commit

git remote add origin

リモートリポジトリを作ってみる。今回はBacklogで作ってみる。
git remote add origin <URL>で、リモートリポジトリとローカルリモートリポジトリを繋げる設定をする。
origin: リポジトリの場所(URL)の別名。

$ git remote add origin https://XXX.backlog.jp/git/TEAMXXX/saruXXX.git
$ git remote -v
origin  https://XXX.backlog.jp/git/TEAMXXX/saruXXX.git (fetch)
origin  https://XXX.backlog.jp/git/TEAMXXX/saruXXX.git (push)

git push origin master

リモートリポジトリにpushする。
master: ブランチの名前(=masterはブランチ出来る前の元のやつ)

$ git push origin master
Username for 'https://XXX.backlog.jp': XXX
Password for 'https://XXX@XXX.backlog.jp': 
Counting objects: 3, done.
Writing objects: 100% (3/3), 224 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://XXX.backlog.jp/git/XXX/XXX.git
 * [new branch]      master -> master

ブランチ:枝

自分の変更を他に影響与えずに、最後一緒になる。
Gitは、ブランチがすごい強力。

git clone <リモートリポジトリ>

リモートリポジトリからローカルにコピーする。

$ git clone https://XXX.backlog.jp/git/TEAMXXX/team.git
Cloning into 'team'...
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
Checking connectivity... done

git config user.name <ユーザ名>

クローンしたリポジトリのユーザ名を決める。
決めないで、git config user.nameを打つと、globalのが出る。

$ git config user.name saruXXX
$ git config user.name
saruXXX

git branch

ブランチを表示してみる。 * が付いているところが、今いるトコロ。

$ git branch
* master
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

git branch <ブランチ名>

ブランチを作る。

$ git branch
* master
  saruXXX

git checkout <ブランチ名>

今いるブランチ名を変える。
* マークが変わったはず。

$ git checkout saruXXX
Switched to branch 'saruXXX'
$ git branch
  master
* saruXXX

git push origin <ブランチ名>

リモートリポジトリに作ったブランチをpushする。

$ git push origin saruXXX
Total 0 (delta 0), reused 0 (delta 0)
To https://saruXXX.backlog.jp/git/TEAMXXX/team.git
 * [new branch]      saruXXX -> saruXXX

ブランチにファイルをコミットする

取得したリモートリポジトリのファイルを編集して、コミットするまでの流れ。

$ ls
0.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt
$ vi 3.txt 
$ git add 3.txt 
$ git commit -m '好きな食べ物を追加'
[saruXXX 8f88e3d] 好きな食べ物を追加
 1 file changed, 1 insertion(+)
$ git push origin saruXXX
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 336 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To https://saruXXX.backlog.jp/git/TEAMXXX/team.git
   04d42a7..8fXXe3d  saruXXX -> saruXXX

ここからは宿題

  • 時間全然足りてない。。。あぁ残念。むしろ、こっからが聞きたかった。
  • 続きは、前に書いた資料で。宿題!

職人任せにしないインフラ構築/運用〜DevOps時代を生き抜くために〜

  • 中村知成氏@ヌーラボ
  • 日本Jenkinsユーザ会の人
  • 16:50-17:30
  • 元々アプリ寄りの開発者
  • 資料ココ

背景(ヌーラボの中でインフラを考えているか)

  • インフラ少ない、アプリ多い
  • ツールやプラットフォームの不足:シェルとかでガリガリ書く
  • → ノウハウ共有が少なかった
  • → アプリ増えてきた。インフラ少ないの厳しい→ 皆でインフラも見ように変化
  • → インフラツール群が増えてきた(e.g., AWS, Chef)
  • DevOps:アプリ・インフラ両面から問題に対処しやすくなる
  • → ノウハウを共有しやすくする
  • → 動く仕様書が理想的(Excelとかでなくて、実行できるやつ)
  • 作業手順書を残しておく(GUIでなく、CUIとかAPIで)
  • 使える場面では、ツールを積極的に利用する

インフラ構築/運用時の方針

  • 構築・運用作業を減らす
  • → PaaSを活用する
  • →→ AWSならRDSやElastiCacheなど

インフラの構成要素

構築時と運用時に分けて利用しているツールを紹介

構築時

  • ツール:Packer(パッカー)、Jenkins、ANSIBLE(アンシブル)、serverspec、Typetalk
  • ANSIBLE:サーバ構成管理ツール(Chef, Puppet系と同等)=Python製
  • Packer:仮想マシンイメージ(AMIとか)を作成する
  • serverspec:構成をテスト
  • Jenkins:定期的に、コミットの度に、という実行を制御

運用時

  • Jenkins、Fabric、serverspec

ANSIBLE

  • ANSIBLE:サーバ構成管理ツール(Chef, Puppet系と同等)=Python製
  • → ★Point:サーバ側はPythonとsshdだけで動く(導入楽)
  • → 標準で利用する場合は、yml形式。Pythonは知らなくても出来る
  • → 自分で機能足す時だけPythonの知識必要。

Fabric

  • Fabric:デプロイなどを行う
  • → Python製のデプロイツール
  • → ★Point:複数のサーバに一度にコマンド実行出来る
  • → シェルコマンドを列挙していく、シンプルな記述
  • → 冪等性は担保されてない。なので、デプロイでは使うが、サーバ構築時はANSIBLEみたいな使い分け。

Packer

  • イメージ(AMI)作成ツール
  • → Ansibleを起動時に実行可能
  • → Vagrantのイメージ作成に特化した版のツールと思えばいい
  • → VagrantとPackerの作者は同じ
  • → 定期的にAMIを最新化する(使われるか分からないが、Jenkinsで定期的に最新化したAMIを作成している)

serverspec

  • RSpec風のサーバ構成管理テストツール
  • 稼働中のサーバに対して動かしてる

Typetalk

  • JenkinsやAnsibleの実行結果を通知している

Tips:接続先ホストの管理を統一

  • → ssh.configは同一のものを流用

Tips:運用時のI/Fを一元化

  • 運用手順は極力Fabricに寄せる
  • ANSIBLEでも、Fabricでも両方できるが、運用側は、運用時に使うFabric側に寄せるようにしている。

まとめ

  • アプリの人もインフラを分かるようになると、幅が広がるよ。
  • インフラの人は、より高度な作業に注力できるようになるよ。

今後取り組みたいこと

  • 自動ユニットテスト
  • オートスケール
  • Immutable Infrastructure(イミュタブル・インフラストラクチャー)
  • → ざっくり言うと、冪等性をガッツリ担保すんのは諦めよう。そうでなく、新しいサーバ作ってしまって、そっちに振り直せばそれでいいんじゃね。という考え方。


自分が聞いたのは、コレだけ。


聞いてないけど、資料公開されてたやつ

分散型企業で学んだリモートコラボレーションをスケールする方法


開発者がかたるヌーラボのコラボレーションサービス API 最前線


今どきのリアルタイムコラボレーションツールの作り方〜Backlog、Cacoo、Typetalkにおける実践例〜

広告を非表示にする