ambassadorを利用してRethinkDBに繋がらない?
CoreOS上でのRethinkDBアップデートでつまづいた。。。
- 前提
CoreOSを利用していて、UnitでRethinkDBを利用している場合
RethinkDBを2.1系から2.3系へバージョンアップしたかったが、下記のような、rethinkdb及びコンテナ間接続に要するambassadorを利用している場合に接続障害が発生した。
[Unit] Description=RethinkDB After=docker.service Requires=docker.service [Service] EnvironmentFile=/etc/environment TimeoutStartSec=0 Restart=always ExecStartPre=/usr/bin/docker pull rethinkdb:2.3 ExecStartPre=-/usr/bin/docker kill %p ExecStartPre=-/usr/bin/docker rm %p ExecStartPre=/usr/bin/mkdir -p /srv/rethinkdb ExecStartPre=/usr/bin/chattr -R +C /srv/rethinkdb ExecStart=/usr/bin/docker run --rm \ --name %p \ -v /srv/rethinkdb:/data \ -e "AUTHKEY=xxxxxxxxxx" \ --net host \ -p 8080:8080 \ -p 28015:28015 \ -p 29015:29015 \ rethinkdb:2.3 \ rethinkdb --bind all \ --cache-size 4096 ExecStop=-/usr/bin/docker stop -t 10 %p [X-Fleet] MachineMetadata="role=db"
[Unit] Description=RethinkDB proxy/28015 After=docker.service rethinkdb.service Requires=docker.service [Service] EnvironmentFile=/etc/environment TimeoutStartSec=0 Restart=always ExecStartPre=/usr/bin/docker pull ctlc/ambassador:latest ExecStartPre=-/usr/bin/docker kill %p ExecStartPre=-/usr/bin/docker rm %p ExecStart=/usr/bin/docker run --rm \ --name %p \ -e "AUTHKEY=xxxxxxxxxx" \ -p 28015 \ -e RETHINKDB_PORT_28015_TCP=tcp://d001.example.com:28015 \ ctlc/ambassador:latest ExecStop=-/usr/bin/docker stop -t 10 %p [X-Fleet] Global=true MachineMetadata="role=app"
エラー内容
INF/db 1 [*] Connecting to 192.168.255.2:28015 INF/db 1 [*] Unable to connect to 192.168.255.2:28015 FTL/db 1 [*] No hosts left to try FTL/util:lifecycle 1 [*] Shutting down due to fatal error
ambassadorを通しての接続が出来ない模様。
AUTHKEYとして設定してあるパスワードも設定を施行しようも下記エラーが出てしまう
"It's illegal to delete rows from the rethinkdb.cluster_config table."
解決
どうやら、RethinkDB2.3系からAUTHKEYの設定方法が変わったようだ。
Alternatives to RethinkDB 2.3 auth
r.db('rethinkdb').table('users').get('admin').update({password:'xxxxxxxxxx'})
接続できた。。。
MashupAwads2016 沖縄予選に参加したよ
はじめに
MashupAwards2016とは・・・
日本最大級の開発コンテストMashupAwardsの一次予選免除の権利をかけたハッカソンイベントです。MA2016は賞金総額約500万円!!賞もたくさんあるよ。
賞金総額500万円ですよ:exclamation: :exclamation: という金額に魅かれるところもありますが
いろいろなモノづくりを楽しめる滅多にない機会!!
「会社・学校を超えて知らない人とアイディアを練って、チームづくりをして、モノを作る」それが醍醐味です :smile:
イベント様子詳細はこちらからTogetter
紹介すること
今回参加して実際に作成したモノの技術を紹介します
MashupAwards2016 沖縄予選にて実際に作成・紹介した「MESH振る(メッシブルと読む)」を作成しました。 名称はメッシ(サッカーで有名なメッシ+MESHの掛け合わせ)と振る(Move)を合わせた造語ですw
イベント説明 :speech_balloon:
審査基準だよ。 ビジネス性や事業性は関係ないのが特徴です。
提供API
API一覧
- Microsoft Cognitive Services
- Emotion API / Computer Vision API
- Speech API など21種類(2016/10/3現在)
- Twilio API
- Tel
- SMS
- カンファレンス機能など多数
- ぐるなびAPI
- レストラン検索API
- 店舗情報検索など多数
- Microsoft Cognitive Services
ガジェット :nut_and_bolt:
Hack1日目 :computer:
既にMESHは使いたい!というのは決まっていたので、案だけはいくつか候補をあげていました。
Hackタイムが始まる前にアイスブレイク/インプットタイムで更に案をブラッシュアップ。チームも4名になりました。
チーム名:突貫boys
内容は以下のとおり
・MESH(MOVE)を交通安全お守りに入れ、車に吸盤でくっつけて揺れ幅を検知 ・揺れ幅により、Slack通知・Twilioでの連絡を取り入れる
まずMESHを利用するためにはiPhoneにてMESHとペアリング・動作させるためのアプリをインストールする必要があります。
MESHAppでは簡単にアプリを作ることができます。例えば「音声を検知したら写真を撮影する」
MESHとslackを実際に使った場合
- 注意
MESHのタグにはSlack通知が無いのでMESH SDKと呼ばれる管理画面からJavascriptでWEBからの作成が必要となります。
//The endpoint URL of Remote API var endPointURL = 'http://__ORIGINAL_API__/slack_notify'; var alert = properties.myProp; var data = { "msg":alert, "apiToken":'xxxxxxxxxxxx', "channel":'#general', } //Puts the camera into "Shooting mode" ajax ({ url : endPointURL, type : "post", data : data, dataType : "json", timeout : 5000, error : function ( request, errorMessage ) { log("SlackAPI : Network error"); callbackSuccess( { resultType : "continue" } ); } }); return { resultType : "pause" };
API側は自前でよしなに作ってやればSlackに通知が行きますよー。
API実装にはMicrosoftAzureからUbuntu16.04を起動し、Nginx + Ruby on Railsで簡単に構築しますた。
Azureは無償サブスクリプション利用いたしました。MS様ありがとうございます :smile:
Hack2日目 :computer: :sweat_drops:
全体的なハッカソンとしての機能があまりにも少ないため、チーム内でブラッシュアップ案で以下のような流れを決定しました。
1.揺れの検知レベルを3段階とする 危険なレベルに合わせ連絡手段を変更 └全Lv共通にslackに報告 Lv1、安全を促す警告※運転者のslack - 休憩をして欲しいのでぐるなびAPIを使って近くの駐車場のあるお店(カフェ)一件を通知 Lv2、安全を促す強い警告※運転者のslack - 同様にお店(カフェ)を通知 Lv3、事前に登録してある、twilioを使って連絡先に連絡
出来たMESH Appでの画面図
- 注意
MESHのタグにはTwilioが無いのでMESH SDKと呼ばれる管理画面からJavascriptでWEBからの作成が必要となります。
//The endpoint URL of Remote API var endPointURL = 'http://__ORIGINAL_API__/twilio_call'; var alert = properties.myProp; var data = { "To":'+8190xxxxxxxx',#国際番号から電話番号を "key":'xxxxxx', } //Puts the camera into "Shooting mode" ajax ({ url : endPointURL, type : "post", data : data, dataType : "json", timeout : 5000, error : function ( request, errorMessage ) { log("TwilioAPI : Network error"); callbackSuccess( { resultType : "continue" } ); } }); return { resultType : "pause" };
Twilioは既にチャージされたアカウントをお借りしました!Twilio様ありがとうございます
かっ完成!
出来上がったお守りの画像※お守り袋に入れる時間ありませんでした :sob:
検証環境:
ミニ四駆+MESH振る(ムダにカッコいいショット)
検証風景:
最終設計:
懇親会
美味しいお食事がいっぱい用意されてました :smile:
かんぱーい :tada:
懇親タイム
発表
いよいよ発表の前に!台風の前日なので、進路が気になる〜〜 :sweat: ※2016/10/2は台風前夜 915hpaまで発達した大きな台風です。。。 ※無事東京に戻れたそうです :smile:
いよいよ賞の発表
Microsoft賞の発表
スパイルスチーム
スーパー居留守をもじって、玄関先にMESH(Motion)とiPhoneを設置し、顔写真を撮影。事前に登録されているホワイトリスト・ブラックリストの写真を元にiPhoneから出される表示を変えるアプリ (ホワイトリストには天使の絵を出し、また来てねを催促) (ブラックリストには本人の画像から血が滴るように見えるように表示w) ぶっ飛んだ作品だけど、本当に商品化できそうな予感のアプリでした
Twilio賞の発表
Emotion Phone
エモーションフォン。ブラウザでTwilioクライアントを利用し、音声電話を実現。 ただの音声電話ではなく、PCカメラの人物が”笑顔”にならないと発信できない仕組み。こっこれはコールセンターで本当に実現できるのではないかー??
そして・・・「ぐるなび賞」「最優秀賞」は :tada: :raised_hands: :tada: (パチパチ)
MESH振ル
12/3の2次予選権利獲得しました〜!!
まとめ
- いいチームメンバーに囲まれました :smile: スライドを作ってくれたM/Kさん
- プレゼンを盛り上げるために突貫で作ってくれたMovie #Cさん
- デバッグや各MESHのフローを考えてくれたK/Aさん
いいチームワークで作成時間1分前まで安心して、発表に臨むことができました :smile:
お疲れしたー!!
MA2016 myThings〜はじめてのIoT〜に参加したよ〜
myThings利用によるサービス開発
株式会社リクルートホールディングス:伴野さん 講師:ヤフージャパン 山本さん
myThingsのサービス
myThingsの基本機能について
○○が××ばつだったら △△を■■する
など、iOS/Androidアプリ上でGUIベースで簡単に自分専用アプリが作れるスグレモノ!
現在対応しているプロダクト(API/アプリ)は約50アプリ
本日のやることIoTデバイスのプロトタイピングを始めよう
- myThingsを使用してIoTを始めてみよう
- myThingsを使ったアイディアソン
覚えていただく用語について
○○が××だったら <=トリガー △△を■■する <=アクション
○○ △△はチャンネルの位置付け
myThings IoTの基本セット
・Raspberry Pi2 ModelB ・ブレッドボード ・USBシリアルアダプター
myThingsの基本動作
・トリガーは15minの定期間隔のポーリングで実施される(または手動実行も可能) ・アクションはwebsocketやポーリングなどで実施が可能
クラウドサービスIDCFとも連携できるよ!?
IDCFチャンネルでできることはカスタムイベント・トリガーを作ることが可能です。
Twitter <--- myThings ----> Aaction <-----raspi(データを送信)
今日実装すること
○○が××だったら、IDCDのアクションに通知を送る RaspiでIDCFのアクションを監視して、通知が来てたらLEDを光らせる
Raspiで温度をセンシングして27度以上だったらIDCFのトリガーに通知を送る IDCFのトリガーに通知が来たら△△を■■する
詳細はこちらー 【myThingsハンズオン】○○が☓☓だったら、LEDを光らせよう
やってみた
myThingsDeveloper機能について
何はともあれ、登録してみよう myThingsDeveloper
カスタムトリガーについて・・・自身でトリガーを作成することが可能。トリガー元となるデバイスやプログラムでトリガーイベントを発動させることが可能
作成例 お米がなくなったら自動的にカートに追加する(○○が××だったらを自作)
例:自作デバイスでお米残量をキャッチ => LOHACOでカートに追加(合わせてTweetする)
カスタムアクションについて・・・自身でアクションを作成することが可能。トリガーからキャッチするイベントをデバイスまたはイベントプログラムを実行することができる
例:ヤフーの天気で雨だった場合に特定のURL(API)にリクエストを送り、取得したJsonから今日の天気をホームページに反映させる
ヤフーから天気情報をjson形式でキャッチ それらをURLに対してPostしてごにょごにょできる
アイディアソンタイム
15分という短い中、2チームに分かれてアイディアソンを実施しました。
ピザ食べながら :smile:
チーム:ナハx4
・毎月の食費上限をzaimに登録 ・好きなレシピをcookpadから取り出し(トリガー)、WEBショッピングにて自動的に食材を購入(アクション) ・zaimの食費上限値を超えていなければ(トリガー)、Facebookに今月達成の記事投稿を行う(アクション)
チーム:沖縄野球Aチーム
・筋トレの回数をAppleWatchで回数をカウント(トリガー) ・規定回数以上の筋トレが完了したら、デバイスプロジェクションマッピングを作動させる(アクション)
参加してみて
- myThingsを触ってみて、既存アプリでもノンプログラマでも簡単に自作アプリが作れること
- myThingsDeveloperを利用することにより、更に高度なサービスの開発を作ることが可能となる
お疲れしたー!
10/1,2にMA2016沖縄予選があるよ!
是非是非ご参加を〜
Ansible + TestKitchen (Serverspec) for Docker(初級者向け)
Ansible + TestKitchen for Docker 社内ハンズオン
ターゲット:Ansibleを始めて利用する方向け
今回、社内でAnsible + TestKitchenを使った、インフラのテスト駆動開発handsonを実施しました。 その内容を公開いたします。
Ansibleとは
一言で「エージェントレスで手軽に利用出来る構成管理ツール」で Chef/Puppet/Itamaeなど様々あるプロビジョナーと並ぶツールです。
TestKitchenとは
こちらは主にテスト環境への構成のプロビジョニングと構成管理が正しく実装されているかをチェックするためのツールです。 様々なプロビジョナーと連携しつつ、構成管理対象のターゲットをvagrant / dockerなど適用できるため、今回採用しました。
今回のハンズオンでやったこと
AnsibleとTestkitchenを用いてインフラのコード化及びTDDを実践する テスト実行環境はDocker / 本番環境はあらかじめOpenStack上に作成したUbuntu 14.04のサーバーにて実行をする
Ansible + TestKitche (infraTDDゴール)
事前準備(Mac 環境構築)
$ bundler -v Bundler version 1.12.5 $ ruby -v ruby 2.1.5 $ docker -v Docker version 1.12.0-rc2 または Docker version 1.11.2
前提として ruby 2.1.1<で話を進めていくため、以下を事前にインストールすることを推奨とする(Mac) ※gemの関係上provisionerにansible_playbookが認識できない事象あり
$ brew update $ brew install rbenv ruby-build $ brew update $ brew install rbenv ruby-build (もしくは、brew update rbenv ruby-build) $ rbenv install 2.1.5 $ rbenv global 2.1.5 $ rbenv rehash # PATH に追加 $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile # .bash_profile に追加 $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile # 上記設定の再読み込み $ exec $SHELL -l $ ruby -v ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0] $ rbenv exec gem install bundler Bundler version 1.12.5
Dockerインストール
$ brew cask install virtualbox $ brew install docker $ brew install docker-machine $ docker -v Docker version 1.11.2, build b9f10c9 # 初期設定 $ docker-machine create -d virtualbox ansible-hands-on $ eval $(docker-machine env ansible-hands-on) # VPNソフトを起動しているとエラーが出る場合があるよ!FAQ参照
ansibleインストール!
$ brew install ansible $ git clone https://github.com/vSakumoto/ansible_hands_on.git ~/ansible $ cd ~/ansible $ bundle install
ハンズオン実施流れ
うちの会社では以下の流れで実施しました
1. 概要資料の説明 2. gitからcloneしていただいたplaybookを実行して、DockerでのTDD及びstaging環境へのプロビジョニング実施 3. git clone ファイルを編集し、実際にtasksを書き換え パッケージの追加・テスト及びstaging環境へのプロビジョニングを実施する
虎の巻として以下を展開
ansible tasks/main.yml
--- #<- マジックメソッド!! 記述の際には必ず記述する - name: HOGEHOGE INSTALL #<-- 1タスクを記述するディレクティブ設定 apt: pkg=nginx state=present update_cache=yes #<-- apt-get install -y nginx を実施 sudo: yes # sudoをつけて実行するかを選択記載なければssh接続設定となっているユーザーで実行 tags: nginx # ansbile-playbook -i hoge -t nginxとすることで対象のタグのみを実行させることが可能 別用途としてはprd | stgなど切って本番|stgのプロビジョニングを変更するなど when: ansible_os_family == 'Ubuntu' # Ubuntu のみの場合に実施 - name: HOGEHOGE INSTALL yum: pkg=nginx state=present update_cache=yes sudo: yes when: ansible_os_family == 'RedHat' # RedHat系(CentOS) tags: nginx # リポジトリ追加 - name: add php repo apt_repository: repo="ppa:ondrej/php5-5.6" tags: repo when: ansible_os_family == 'Ubuntu' sudo: yes - name: Add repository yum_repository: name: epel description: EPEL YUM repo baseurl: http://download.fedoraproject.org/pub/epel/$releasever/$basearch/ when: ansible_os_family == 'RedHat' # ファイルコピー - name: Upload Test File copy: src="bash_profile" dest="/home/vSakumoto/.bash_profile" owner=vSakumoto group=vSakumoto mode=0644 tags: home_set sudo: yes # ディレクトリ作成 - name: private directory file: path="/home/vSakumoto/foo" state=directory owner=vSakumoto group=vSakumoto mode=0700 tags: home_set sudo: yes
serverspec記法
require 'spec_helper' describe package('nginx'), :if => os[:family] == 'ubuntu' do # os[:family]の環境変数からubuntu判定をし実行 it { should be_installed } # package nginxがインストールされているか end describe service('nginx'), :if => os[:family] == 'ubuntu' do it { should be_enabled } # 自動起動がONになっているか it { should be_running } # nginxが動作しているか end describe port(80) do it { should be_listening } # 指定ポートが空いているかどうか end # kitchen groupがあるか describe group('kitchen') do it { should exist } end # kitchen userがいるか describe user('kitchen') do it { should belong_to_group 'kitchen' } end # 配列でチェック %w{vSakumoto xshsaku kitchen}.each do |users| describe user(users) do it { should belong_to_group users } end end # ファイル有無 describe file('/home/vSakumoto/.bash_profile') do it { should be_file } end # ディレクトリ有無 describe file("/home/vSakumoto/public_html") do it { should be_directory } end
ハンズオン時間は約2hぐらいを目安にし、無事完了しました。
ハンズオンを通して・・・
インフラ屋さんももちろんだけども、プログラマの方にコードでインフラを「管理できる・構築できる」メリットを伝えられるいいチャンスかもしれない
参考サイト:
[Ansibleのテストをtest-kitchenとServerspec、dockerで行う] (http://qiita.com/minamijoyo/items/467ddd13c0cab15330bf)
Docker Private Betaを早速使ってみた
今朝以下のようなメールが到着
Docker Private Betaの申し込みを4/5に申し込んだので約1か月でお試し版が利用できるようになります。
for macをインストール
通常のアプリインストールの要領で実施
1.インストール画面
インストール画面 4step
2.Docker.appを起動し、メールに記載されていたTOKENをコピペ
3.下記画面が出てくればインストール完了
*途中、Mac管理者のパスワードを入力する必要があります。
4.タスクバーに常駐されれば完了!
nginxをお試し起動
docker run実行
$ docker run -d -p 8001:80 --name webserver nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx efd26ecc9548: Pull complete a3ed95caeb02: Pull complete a48df1751a97: Pull complete 8ddc2d7beb91: Pull complete Digest: sha256:2ca2638e55319b7bc0c7d028209ea69b1368e95b01383e66dfe7e4f43780926d Status: Downloaded newer image for nginx:latest 3c3462c4e0d473202dc2433ad75f416de5a0d029e25ea67e856057a54da3b950
起動確認
起動成功!!
所感
今回のDocker Private BetaについてはVirtualBoxなしで手軽に利用できる!というところが凄くいいところ。 まだBeta版ではありますが、手軽に使え、今後の可能性としてはローカルWEBアプリとしても利用できるんじゃないでしょうか?
番外編Windows7でインストール
1.メール文中にある[Get docs and download the app]からインストールサイトへ
2.for windows版をダウンロード**
3.msiから起動して、インストール実行**
(ノ゚ο゚)ノ オオオオォォ
Windows10から対応しているようです。。。こちらはupgrade後試してみます。
参考サイト
dots.カンファレンス チーム開発を支える技術に参加したよー 午後の部
dots.カンファレンス チーム開発を支える技術に参加したよー 午後の部
dots.カンファレンス、チーム開発を支える技術に参加してきました!
午前の部、午後の部、と別れており今回は午後の部の紹介をしていきます。
※私の範囲内で聞いて咀嚼したものですので、内容に相違がある可能性があります。
講演 #午後の部
Qiita/Qiita:Teamの開発を通して見つけた、Incrementsの文化を作る方法
Increments株式会社 東峰 裕之氏
自己紹介:
Incrementsってどんな会社? 書き方は「++」で言語のインクリメントを表している
ビジョン:ソフトウァア開発を良くすることで、世界の進化を加速させる
立ち上げ3名、メンバーは14名!?
- Running Leanを実践
- 何を作るかより、何を作らないか
- MVPで検証し、すぐ捨てる
無駄な作り込みは悪!
価値仮設シートの実行
- (ユーザー)___は、
- (欲求)____たいが、
- (課題)___なので、
(製品の特徴)___に価値がある。 ※cookpadさんのものを踏襲し実行
属人性の排除について
- 情報共有をTeamlでシェア
Teamlで書いてあれば誰でも実行可能
ChatOps
- Qiitan(BOT) rubotyを利用し、掃除当番、Issue登録、Deploy/Mearge
- 面倒なルーチンワークは常に疑う
例:勤怠管理は打刻漏れとかめんどくさいよね!?=> Qiitan(Bot)に移行
初期メンバーは3人から14人になってからどう変わった?
- 多様化への対応が求められた
尖った人が多いが文化はあっている。趣向は少々違う 多様であり、同じ文化に共鳴する集団であることが今の強み
- 働きやすさをどう担保するか
フレックス&リモートワークの導入 他人に強要しない
- 社長<=>各社員での月一1on1
これを実現していくことで以下のことが芽生えてくる(はず!) 会社:社員を知ることをあきらめない メンバー:会社が「よくしてくれるはず」をあきらめない
- 2014-2015はTeamに注力
実行したこと Teaming 輪読会 1.学習する組織作り 2.意見の相違の乗り越えられ 3.解決策が生まれるまで議論できる関係性があり 4.安心して率直に意見を述べられる環境である
これができる組織でなら困難を乗り越えていけそうに感じられる。
オススメの本:(http://www.amazon.co.jp/dp/4862761828/)[チームが機能するとはどういうことか]
クラウドソーシングでチームを作る方法
株式会社StartupTechnology 菊本 久寿氏
自己紹介:エンジニア
もともとはフリーランスで一人でタスクをたくさん受けていた。 ただ案件を取りすぎて、、、炎上・・・ その中からクラウドソーシングサービスを設立して、 外注するようになったのが設立経緯
クラウドソーシングを利用する理由:エンジニアを採用できない
メリット
- 取りやすい
- (自粛)
- 必要な時に必要な分使える(変動費化)
- フリーランスなど個人でも使える
- 個人でも払える額で発注できる
向かないプロジェクト
- 大規模プロジェクト
- PMがいない
ISMSなどが絡んでいる場合
受注側の気持ち:受けたくない地雷案件
- ボリュームが見えない
- ボリュームがでかい
- やすい
夢がいっぱい
正しい募集方法
- やることが明確
- 時給制
時間コミットさせない(1500円〜2000円)
スクリーニングについて
先に仕事をやってもらってからスクリーニングに(通常の採用と異なる)
開発の進め方
- PMがタスク登録(レビュー)
開発者が好きなgit pull request / git flowを使ってオープンソースのような形式で開発
コミュニケーション
同一のチャット空間で進めることで技術ヒエラルキーが生まれる(複数人アウトソースする場合)
ルールの定義
- セットアップ方法のドキュメンテーション(README)
- コード規約を定める
- その他チームのルールを定義する
プロジェクトの背景などもドキュメンテーション
運用しながらスクリーニング
運用しながら個々のスキルを把握しスクリーニングを行う
クラウドソーシングエンジニアの状況把握
- スキルが把握できない -> 技術選定を簡単なものに寄せる
- 時間が合わない -> コミュニケーション量を減らす
- 稼働が読めない責任も持てない -> 大きいタスクを振らない
- 仕様を把握していない -> やることはコードを書くように細かく書く
※言語選定はRubyOnRailsがオススメ! PHPだと複数のフレームワークがありパイが獲得できなくなってしまう
※最新の技術ではなく一般的なソリューションで伝える
- 難易度は以下(右が難しい)
右が難しい Scaffold / View => Logic => Design
- 大きくタスクを振らないことに関して
- タスクを細かくして、なるべく複数人に作業を依頼する
- 慣れてきたら
- タスクサイズを大きくしてみる
- 上級技術を与えてみる
強いチームをつくる技術
楽天株式会社 及部 敬雄氏
自己紹介: Twitter: @takaking22
- 開発現場でよく見る問題
- レガシーシステム
メンバーのスキルが低いなどなど
一見技術的な問題かと思いきや、コミュニケーションの問題では?
チームがビジネスとの開発基盤になる 以下が3セット
- チーム
- 開発
ビジネス
強いチームとは!?
- 変化に強い
- チームの文化が存在する
改善サイクルが回っている
強いチームは意識的に作る
- Q.誰が作る!? A.チームで!!
- 誰かがやっているうちは継続しない。自転車を押すくらいのイメージ
- 自分たちで自分たちを強くする
及部さんスライド
及部さんオススメスライド
組織の壁とその壊し方
- 自己紹介
- 2003年サイバーエージェントで入社
- ゲーム事業でのマネージャー兼プログラマ経験
- サイバーエージェントのメディア事業、人事責任者
現在はシーエーモバイルにて現任
はじめに
特定の個人を非難するものではなく、気づきを与えるもの
- 会社紹介
- シーエー・モバイル:2000年創業
- ガラケーからSPへ転換し、直近で過去最高業績に復活
- エンジニア:50名強
- プロダクト:大小多数
- 技術環境は決してよくなかった
- パートナーのコンテンツに守られ、技術的な変化の必要性に迫られなかった
課題感があり、なんとかしたいと考えてくれている社員がたくさんいた
組織は生き物
お話しするケースについて
サイバーエージェントのメディア組織
- 組織の壁(1)
企画、開発の壁 (よくある内容で) 企画:「こんな感じでよろしく」 開発:「企画、技術理解なさすぎ」 企画:「開発、事業理解なさすぎ」 ・・・
- 壊し方!(1)
どっちが悪い、というわけではない とにかく互いに歩み寄るための取り組みを行う 企画メンバーがDBのテーブル構造理解、SQLを書く 開発メンバーが市場の競合サービスをめちゃ知っている 技術リテラシーの高い企画者 事業リテラシーの高い技術者 技術者の評価は技術者がする
- プレイヤー、マネジャーの壁(2)
1.優秀なプレイヤーがリーダー兼マネージャーをやらざるをえなくなる問題 2.その結果、優秀なプレイヤーを失い、MTGエンジニアが誕生!問題 3.そんなあの人(2)を見て、ああはなりたくないと人が辞めていく問題
- 壊し方!(2)
1.優秀なプレイヤーは優秀な組織マネージャーとは限らない 2.マネジメントは偉いわけではなく、役割の一つ 3.開発マネジメントの機能、組織マネジメントの機能 4.優秀なプレイヤーがその部署のマネージャーより給料をもらっている世界を当たり前に 5.グレード制度の改定
- まとめ
1.全ての壁は、ドアである 2.問題は、組織・人の数だけ存在しますが、引き出しを増やしてどんなチーム・組織もよくしている人材になっていく
懇親会!!
料理めちゃくちゃうまい>< ハンバーガー、タコライス!?、ケーキ、寿司!! そしてビールまで。。。 至れり尽くせりです
登壇者の方ともいろんなお話が出来、すごく満足度の高い勉強会でした
詳しい内容は是非是非、dots.カンファレンスに参加してください!!
dots.カンファレンス チーム開発を支える技術に参加したよー 午前の部
dots.カンファレンス チーム開発を支える技術に参加したよー 午前の部
dots.カンファレンス、チーム開発を支える技術に参加してきました!
午前の部、午後の部、と別れており
* 午前は技術運用部分のDevOpsに関する内容 * 午後は技術マネージメントに関する内容
とうまく分かれていて、両方の観点からすごく勉強させていただきました。
**注** 寝坊したため、午前の部はNewsPicksさんのセッションからの参加となりました・・・
講演 #午前の部
11:45 株式会社ニューズピックス 松原 孝司氏
企画+開発手法
・エンジニア同士で使うpull requestにも、非エンジニアも参加出来るように SlackのBotを利用して情報の収集とgithub issueの発行を行っている ・他にChatOps(Bot)の機能として、インスタンスの起動・終了などをできるようにしており、 属人性の排除を実施している ・エンジニアのルーチンワーク(定期的なオペレーション)は全てChatOpsを利用している ・スマホからアプリケーションのメンテナンスなども!?
パネルディスカッション
ランサーズ株式会社 横井 聡氏(進行) Connehito株式会社 島田 達朗氏 Kaizen Platform Inc. 石橋 利真氏 株式会社ニューズピックス 松原 孝司氏
Q. 文系・営業の方ですが、その方達がエンジニアを理解する必要性を本セッションで感じられた。 非エンジニアに理解を促すためにどのような手法を使っているか
A. 1.エンジニアから非エンジニアからの質問を集約するツールを使い (今回はQiitaTeam)それを勉強会として展開促している。 2.エンジニア・非エンジニアのMTGを行い、技術でどのようなアプローチが可能かを 実体験(成功体験)を促している 3.あまり質問を受けすぎるのも良くない。線引きが必要です! 雑多な技術相談窓口という事になりがちなのでエンジニアメンバーが週交代で交互に行っている。 調べる力(Google検索力や調べる力)を促す
Q. エンジニアが利用するツールの選定について
A. 1.スタンダードはWEB上で沢山発信されているので「技術者がこれは使える!」というものを采配している 2.使うツールには結論は出ていない、変遷はありRedmine → Like → Google Drive まだ「これ」というものはない、GDriveからまた変わるかも 3.GoogleDrive スプレッドシートは便利、GASも使え非エンジニアも使える。 共通として使う まとめ:ツールの選定は技術者に任せるべき。管理部門選定で結果使われないことが多くなってしまう。※経験則
Q エンジニアの採用について どこから見つけ・技術を見ているのか
・エンジニア不足で同じパイを取り合っていて、難しい。各社の色付けが必要 ・またその各社の色を定期的に発信していくことが大事
懇親会
ビール、飲食が出ましたー うれしー><
ケーキ、サンドイッチにCA MOBILEさんのロゴ入り!!
株式会社ニューズピックス松原さんとお話しできました。
いろいろ質問をしても気さくに回答いただきました>< ありがとうございますm( )m
お話しを聞いていると、 DevOpsは進化を遂げており、単なるAlertの通知やPRの通知だけではないこと。。。 非エンジニアからのissue発行やpush/deployなども当たり前に行っているようです(凄い!
またSlackルームごとでBotに対して叩けるコマンドもあり、非エンジニア層でもある程度運用を担当しているようです。
また何より驚いたのが、皆さん当たり前のように
SQL文を叩ける!!
私が講演を聞けなかった、他社さんもそのようでした。
だって、営業の方や企画者がSQL叩いて集計して、提案するのが一番いいですもんね。集計したい項目だって、時期や年齢層、場所とか利用端末とかとか様々で統計データ取りたいその本人が実行することで、納得のいくデータが取れますよね。
第一部のカンファレンスに参加して
全部は聞けてはいませんが、DevOps(ChatOps)は当たり前に存在していて、それで行うことが2step いや 3step以上進んでいました orz
ps.あっ。。。Mac電源忘れたので明日取りに行きます。。。 今日は眠いので(遅刻したくせに・・・)明日午後の部、書きます!