11月20日、ベルサール六本木グランドコンファレンスセンター(東京都港区)にて「JetBrains Night Tokyo 2018」が開催されました。
JetBrainsは統合開発環境「IntelliJ IDEA」、プログラミング言語「Kotlin」の開発元として有名な、チェコはプラハに本社を置くソフトウェア企業です。イベントでは日本語トラック・英語トラックが並行して行われましたが、両会場ともほぼ満員、ITエンジニア/プログラマからの注目度の高さが伺えました。
JetBrainsの企業カルチャーが紹介された基調講演と、JetBrainsのチームツール、Kotlin、Go言語専用IDE「GoLand」に関するセッションをそれぞれレポートします。
基調講演:開発者の生産性を上げるための組織作り ―JetBrainsでの取り組み
―JetBrains Developer Advocacy Hadi Hariri氏
2000年に3人から始まり、現在は1,000人以上の社員が働くJetBrainsでは、上司を介さずにCEOに意見が言えるような、階層のない組織を常に目指しているとのこと。社内の規則については「自由」の一言に尽き、就業時間、さらには業務内容にも制限がほとんどありません。実際、開発の人間がセールスへ、セールスの人間が開発へと業務を変えることがよく起こるそうです。
「社員には会議に出席さえしてくれれば良い」というHariri氏ですが、この会議についても改善が続けられています。無駄な会議をなくすため、「話し合うトピックは1つの会議で1つ」「会議後に具体的なアクションが発生すること」「疑問は会議前に片づけておくこと」を徹底しているそうです。さらに、開発の進捗状況などを共有する、いわゆるスタンドアップミーティングは廃止し、SlackとConfluenceを使った情報共有に置き換えたとのことでした。
JetBrainsのこういったカルチャーを作り出すのが、3つの“No”です。
- No micro-management
- No micro-reporting
- No permission required
日本で言うところの「中間管理」「定期報告」「申請・許可のフロー」をなくすということになります。これにより、社員一人一人が自分で自分をマネージメントする必要が出てきます。自由に仕事ができるようになる一方、こうしたことが苦手な人も存在するので、Hariri氏は「自己組織化」の重要性を説きました。「仕事を効率化したい」「製品にこの機能を追加したい」と自分で目標を立てたら、それが本当に自分の属するチームや会社に価値を提供するかを、常に自問することが重要だと語りました。
JetBrains IDEとチームツール連携ベストプラクティス
―株式会社サムライズム 代表 山本 裕介氏
JetBrainsの日本での総代理店、サムライズムの山本氏からは、チーム開発のためのJetBrains IDEの使い方、そして日本ではまだ馴染みの薄い、JetBrainsの4つのチームツールが紹介されました。
山本氏は最初にチーム開発で起こりがちな問題を、テキストエディタ、Sourcetree、GitHub、Jenkinsを使ったJava開発の例で紹介しました。
開発者はまず自分に割り当てられたIssueをGitHubで確認し、ブランチを作成。Issueを解決するコードをテキストエディタで書いてgit addします。Sourcetreeから差分を確認すると間違いを見つけたので、テキストエディタにいちいち戻って修正します。再びgit addしてコミット、プッシュまですると、自動的にJenkinsがテストを行います。コードに問題があったためJenkinsが長いエラーを吐き、確認するもソースのどの行が問題なのかわからない。ようやくテストがすべて通ると、Pull Requestを作ります。今度はレビュアがGitHubでレビューするステップへ。しかし、Pull Requestと全体のソースコードを2窓で見比べながらだと効率が悪い……。
こういった問題を解決するものとして、JentBrains IDEと4つのチームツールが紹介されました。
- YouTrack
- TeamCity
- UpSource
- Hub
課題管理ツール「YouTrack」とIDEを連携して課題を選択すると、ブランチの作成、課題の状態切り替えといった定型作業を自動的に行ってくれます。IntelliJ IDEAをはじめとするJentBrains IDEにはGitのクライアントが内蔵されており、git addによる差分をIDE内で確認、その場で修正できます。
CIサーバ「TeamCity」では、テストがすべて完了していなくても、1つでも失敗したタイミングでIDE内で通知してくれます(fail fast機能)。加えて、テストの失敗個所もIDE内で確認でき、失敗したテストのソースコードへ1クリックでジャンプできます。
コードレビューツール「UpSource」はGitHubをはじめとするリポジトリと連携し、Pull Request上のコードをクリックするだけで定義個所や宣言個所を確認できるなど、効率的なレビューを実現できます。
連携ツール「Hub」は、これらチームツールの文字どおりハブとなり、ユーザの一括管理やダッシュボードの提供を行います。
山本氏はセッションの最後、次期バージョンであるJetBrains IDE 2018.3の新機能として、Pull RequestをIDEからレビューできる機能がリリース予定だと発表しました。
UbieにおけるKotlin+Spring Framework
―Ubie株式会社 長澤 太郎氏
KotlinはJetBrainsが開発しているプログラミング言語です。Android開発の選択肢としてよく名前が上がるKotlinですが、長澤氏が勤める医療系のスタートアップ企業Ubieでは、KotlinとSpring Frameworkを使ってREST APIサーバが開発されており、セッションでもサーバサイドでの利用が紹介されました。
まず、簡単にSpring Frameworkのひな形プロジェクトが作成できるWebサービスとして、Spring Initializrが紹介されました。Spring FrameworkはJavaのフレームワークですが、Kotlinでも難なく使えるとのことです。ただし、Nullの扱いなど、Javaとの違いを意識しなければならない部分もあるそうです。
サーバサイドでのKotlinのメリットとして挙げられたのが「コルーチン」です。Spring Frameworkの非同期処理機構「WebFlux」はKotlinからも利用できますが、そのしくみの理解はハードルが高いそうです。Kotlinでは標準API「コルーチン」のおかげで、Javaに比べて非同期処理を簡単に記述できるとのことでした。
最後に、UbieでのKotlinへの取り組み方が紹介されました。Kotlinは表現力の高い言語で、「エレガント」な書き方もできますが、それによって可読性が下がってしまうことが多いそうです。Ubieではコーディングガイドラインを策定し、社内での統一を図っているとのことでした。
メルカリ社員100人に聞いたGoLandの使い方
―株式会社メルペイ 若命 全洋氏
若命氏は事前に、メルカリグループのチャットルームにてGoLandの学習方法と使い方、IDE全般の話題についてアンケートを取っており、その結果をもとに表題のセッションを行いました(演題には「100人」とありますが、実際は372人に訊いたそうです)。
IDEによる開発の課題として、大量の機能のうち実際に使うものは自分の知っている少数のものだけに限られてしまうということがあります。
多機能なGoLandを使いこなすためにまず紹介されたのが「Productivity Guide」です。これは、GoLandで自分がよく使っている機能/使っていない機能を一覧できるものです。若命氏はこの機能のユニークな使い方として、「同僚のProductivity Guideeを見せてもらう」を提案しました。
GoLandはじめ、JetBrains IDEでもっとも重要だと若命氏が強調した機能が「Find Action」です。これはJetBrains IDEにおけるアクション(機能)を検索できるもので、「今日はこれだけでも覚えていって」という熱の入れようでした。
ペアプログラミングも効果的だと紹介されましたが、ハードルが高いと感じるならショルダーサーフィン(ここでは許可を取ったうえで同僚の肩越しにコーディングの様子をみること)が気軽で楽とのことでした。
IDEの習熟方法のまとめとしては、機能や操作の不満に慣れずに、その都度解消していくことが重要だと述べられました。
セッション後半では、Go言語の開発でIDEに求める機能に話が移ります。若命氏が重要視しているのはパッケージ管理ツール「Go Modules」への対応でした。GoLandではすでにサポートされており、「まさに顧客の求めるものだ」と太鼓判を押しました。
最後に、「GoLandでよく使う機能」のアンケート結果が発表されました。そのときのシーンに合わせてアクションを提案してくれる「Show Intention Action」、定義個所にジャンプする「Declaration」、godocがすぐに確認できる「Quick Documentation」など、さまざまな便利機能が紹介されました。