qiitaの作り方 〜incrementsのチーム開発とプロダクトマネージメント〜
TRANSCRIPT
氏名 及川卓也
Twitter @takoratta
Facebook takoratta
Qiita takoratta
GitHub takoratta
経歴 DEC → Microsoft → Google → Increments
「DEC時代はデータベースで競合していたし、マイクロソフトはSQL Serverでオラクルとバチバチやってた。グーグルなら関係ないかと思いきや、数年前から裁判し始めてしまった(笑)。そんな私がオラクルのこういう場所に立てて、とても光栄」と語り、会場を沸かす及川氏。
「DEC時代はデータベースで競合していたし、マイクロソフトはSQL Serverでオラクルとバチバチやってた。グーグルなら関係ないかと思いきや、数年前から裁判し始めてしまった(笑)。そんな私がオラクルのこういう場所に立てて、とても光栄」と語り、会場を沸かす及川氏。
IBMはもっと縁が薄いです �
Increments
「ソフトウェア開発をよくすることで
世界の進化を加速させる」
プログラマのための技術情報共有サービス
ドキュメントを軸としたコラボレーションサービス
プログラミングのメモやスニペットの記録に最適なアプリケーション
Kobito
知見を共有しスキルを高めることができるプログラミングに特化したオープンな情報共有コミュニティ
かんたんにわかりやすく書ける
タグやストックで見たい記事がみつかる
編集リスエストで知恵を分けあえる
シンプルで使いやすい専用エディタ
知見を共有しスキルを高めることができるプログラミングに特化したオープンな情報共有コミュニティ
かんたんにわかりやすく書ける
タグやストックで見たい記事がみつかる
編集リスエストで知恵を分けあえる
シンプルで使いやすい専用エディタ
編集リクエスト
GitHubのPR (Pull Request) のように、変更を直接行い、それを提案として、作者に送ることが出来る。
作者は送られた編集リクエストを差分の形でレビューすることができ、内容を確認の後、採用・不採用を決める。
採用された編集リクエストより、その後に付与されたストック数の相分のContributionを得ることができる。
ContributionContributionとは
Contribution (コントリビューション ) とは貢献度を
意味し、投稿した記事がストックがされることや編
集リクエストが受け入れられた記事がその後ス
トックされることで数値が上がっていきます。編集
リクエストによる貢献は投稿した記事の貢献の 10
分の1とし、10を最大としています。
私たちが大切にしていること作業は意識的に自動化する
Incrementsでは様々なレイヤーで自動化を推し進めています。
自動化できる作業は自動化することで、ユーザーヒアリングや設
計など自動化できない創造的な仕事により多くの時間を充てら
れるようにしています。また自動化して作業がコード化されると、
作業内容が可視化されるため作業フローを改善しやすくなりま
す。効率化のための改善は継続的に行っています。
重要な価値に集中する
Incrementsは「本当に必要かどうか」を考えることをとても大事
にしています。リーン・スタートアップを元とした開発フローを構築
しており、実装する前に価値仮説を立てて、提供したい価値や解
決したい課題を明確にすることに時間をかけています。またユー
ザーヒアリングを非常に大事にしています。エンジニアでも直接
ユーザーからフィードバックを受ける機会が多いので、自分の考
えだけに寄らずユーザーのニーズに沿った開発を無駄なく行え
ます。そのため、エンジニアでもユーザー体験を重要視していま
す。
情報共有で属人性を減らす
ミーティングの議事録はもちろん、口頭で話したようなことも価値
がありそうならばQiita:Teamへすべてきちんと残し、特定の人達
しか知らないという状況を防いでいます。困ったことはデイリース
クラム(朝会)や日報などでこまめに共有、チームみんなで解決し
ていくことを徹底している環境です。
HRTを大切にしたコミュニケーション
HRTとは「Team Geek ―Googleのギークたちは
いかにしてチームを作るのか」という本にある考
え方で、Humility(謙遜)、Respect(尊敬)、Trust(信頼)の3つを意味しています。「驕り高ぶら
ないようにしよう」「相手を尊敬しよう」「人を信頼
してまかせよう」といった HRTの概念を意識する
ことで、コミュニケーションの衝突が避けられるよ
うになりました。また導入した結果、元々気をつ
けている文化だったことに気づくことができまし
た。
自動化
開発フローはすでに一般的となったGitHubのPull Requestを用
いた手法
各レポジトリのmasterブランチから分岐して実装し、実装終了後
にGitHubでPull Requestを投げて、Circle CIによるCIを走らせる
とともに、他のエンジニアにコードレビューしてもらい、コードレ
ビューとCIが無事終了したならば、masterブランチにマージしてデ
プロイ
テスト
Circle CIが走る際に自動的にテストが実行される。
● Linterによる文法チェック(静的コード解析)
○ Linterによる文法チェックはYAMLとSCSS、Rubyに対して
行われるようになっている。SCSSはscss-lintをRubyはRubocopを使っている。
● RSpecによる機能テスト
Circle.ymlからの抜粋
test: override: - bash script/circleci/lint_yaml.sh - bash script/circleci/lint_scss.sh: parallel: true files: - app/assets/stylesheets/**/*.scss - bash script/circleci/lint_ruby.sh: parallel: true files: - app/**/*.rb - lib/**/*.rb - spec/**/*.rb - bash script/circleci/test_rails.sh: parallel: true files: - spec/**/*_spec.rb - bash script/circleci/test_javascript.sh
bundle update
Gemパッケージの更新をCIに組み込む。
● Circle CIのNightly Buildsの機能を利用。
○ 外部から環境変数を設定した上で、特定のブ
ランチのビルドを行う
○ 環境変数BUNDLE_UPDATEがtrueのときに
bundle updateが起動される
○ そのスクリプトをcronで毎日実行
Circle.ymlからの抜粋
test: post: - > if [ -n "${BUNDLE_UPDATE}" -a "${CIRCLE_BRANCH}" = 'master' ] ; then bundle update fi
Cronサーバー
Circle CI
masterブランチのサーバー
GitHub
スクリプト実行でCircle CIを起動
環境変数BUNDLE_UPDATEを付加してCIを実行
$ bundle update
git pushおよびPull Requestの作成
hook
CI
Qiitan
c.f ) Ruby製HubotクローンのRubotyをSlackで動かす - Qiita
IncrementsのProduct Management
PM×2
● 及川: Qiita● 海野(CEO): Qiita:Team
○ しゃちょ〜 がPMやってちゃいけないので、Qiita:Teamの
PMを大募集中!
http://qiita.com/takoratta/private/0c941a1ce2e9a660d093
WE ARE HIRING!
世界の進化を加速させるために!
みんながかんたんに始めることができ、世界にインパクトを与えられること。
私たちは、ソフトウェア開発をよくすることで、よりよい世界が実現するまでの時間を大
幅に短縮することを目指しています。私たちといっしょに未来をつくりましょう。
http://increments.co.jp/jobs