Developers Summit 2019に参加した感想とQiitaのWeb画面で記事を書くのが辛かった話

(本記事は[自分のブログ](https://hinastory.github.io/cats-cats-cats/2019/02/15/devsumi-2019-winter/)からの転載記事です。「QiitaのWeb画面で記事を書くのが辛かった話(ポエム)」は記事の一番最後にあります。)

Developers Summit 2019([#devsumi](https://twitter.com/hashtag/devsumi))に参加してきました。会場は目黒の[ホテル雅叙園東京](https://www.hotelgajoen-tokyo.com/access)です。去年は仕事の都合上参加できなかったのですが、今年はなんとか両日とも午後を空けて参加してきました。

<table align=center>
  <tr>
    <td width=150px>
      <img style="float:left;margin-right:.5em;" src="http://event.shoeisha.jp/static/images/event/896/1200.png" alt="" width="120" />
    </td>
    <td width=400px>
      <div><a href="https://event.shoeisha.jp/devsumi/20190214">Developers Summit 2019</a></div>
      <div><a href="https://event.shoeisha.jp/devsumi/20190214">ITエンジニアの祭典「Developers Summit 2019」（デブサミ2019）は、2019年2月14・15日に開催！</a></div>
    </td>
  </tr>
</table>

## 1日目 参加セッション

午後から参加しましたが、この日の目玉は何と言っても【14-G-1】のGCP特別セッションです。Googleの実際の開発手法やCI事情が聞けるなんてめったにないですから本当に楽しみにしていました。あと、なにげにこの日の最終セッションの技術書・ビジネス書大賞は世相を反映しているので毎年楽しみにしています。

<img src="https://hinastory.github.io/cats-cats-cats/gallery/events/devsumi2019/devsumi-001.jpg"></img>
<img src="https://hinastory.github.io/cats-cats-cats/gallery/events/devsumi2019/devsumi-002.jpg"></img>

### Cloud Native時代における Docker / Kubernetes による開発
　[【14-A-4】](https://event.shoeisha.jp/devsumi/20190214/session/1931/) *13:05～13:50  青山 真也[サイバーエージェント]*

[Kubernetes完全ガイド](https://book.impress.co.jp/books/1118101055)の著者によるセッションです。1/10にあったKubernetes Meetup Tokyo　#15の発表も見ていたので、今回も楽しみにしていました。発表内容はタイトルどおりクラウドネイティブやKubernetesの解説だったのですが、その構成が素晴らしかったです。マイクロサービスとサービスメッシュから始めて徐々にブレークダウンしてKubernetesの話題にもっていき、最後にGitOpsで締める流れは非常に分かりやすかったです。もしクラウドネィティブやKubernetesにもやもやしている方はスライドを一読することをオススメします。

<table align=center>
  <tr>
    
    <td width=400px>
      <div><a href="https://speakerdeck.com/masayaaoyama/devsumi2019-amsy810-k8s">Cloud Native時代における Docker / Kubernetes による開発 Developers Summit 2019 at 02/14 / devsumi2019_amsy810_k8s</a></div>
    </td>
  </tr>
</table>

ちなみにクラウドネイティブ関連ではJapan Container DaysやKubernetes Meetup Tokyo　#15の参加レポートも書いているのでよろしければそちらもどうぞ。

<table align=center>
  <tr>
    <td width=150px>
      <img style="float:left;margin-right:.5em;" src="https://hinastory.github.io/cats-cats-cats/gallery/thumbnails/container-days-logo.png" alt="" width="120" />
    </td>
    <td width=400px>
      <div><a href="https://hinastory.github.io/cats-cats-cats/2018/12/06/container-days/index.html">JapanContainerDays v18.12 に初参加</a></div>
      <div><a href="https://hinastory.github.io/cats-cats-cats/2018/12/06/container-days/index.html">12/4(火)にJapanContainerDays v18.12に初参加しました。このイベントは春に1回目を開催して今回で2回目の開催だそうで�</a></div>
    </td>
  </tr>
</table>
<table align=center>
  <tr>
    <td width=150px>
      <img style="float:left;margin-right:.5em;" src="https://hinastory.github.io/cats-cats-cats/gallery/thumbnails/k8s-tokyo-logo.png" alt="" width="120" />
    </td>
    <td width=400px>
      <div><a href="https://hinastory.github.io/cats-cats-cats/2019/01/20/k8s-meetup-tokyo-15/index.html">Kubernetes Meetup Tokyo　#15 - KubeCon 2018 Recap に初参加</a></div>
      <div><a href="https://hinastory.github.io/cats-cats-cats/2019/01/20/k8s-meetup-tokyo-15/index.html">Kubernetes Meetup Tokyoに初参加しました。会場は六本木ヒルズのGoogle東京オフィスです。倍率2倍の抽選を潜り抜けて�</a></div>
    </td>
  </tr>
</table>

### いまなぜGoogle Cloud Platformを学ぶのか！？〜GCPを支えるGoogleテクノロジーと愛を語る〜
　[【14-G-1】](https://event.shoeisha.jp/devsumi/20190214/session/2014/) *14:10～15:40 中井 悦司[グーグル・クラウド・ジャパン]、他*

さて、本日一番楽しみにしていたGCP特別セッションです。さすがGoogleだけあってテーブルはコンセント付きで、Wi-Wiカードもあって、コーヒーとお菓子付きで、バレンタインデーだからかもしれませんがGCPを象ったチョコとクッキーも貰いました。至れり尽くせりですね。

<img src="https://hinastory.github.io/cats-cats-cats/gallery/events/devsumi2019/devsumi-003.jpg"></img>

本題のGoogleの開発環境に関するプレゼンですが、いろいろと予想外のこともあったので、手元のメモからなるべく詳細に書き起こしてみました。

- 共通ミドルウェアサービス
  - 分散ファイルシステム、分散NoSQL、分散ロックマネージャ、分散XXX・・・
- 単一リポジトリによるソース管理
  - Gitは使っていない
  - １日あたり4万コミット、20億行のソースコード
  - 全てのプロジェクトを一つのリポジトリに保存。プロジェクトごとにディレクトリに分けて管理
  - 他のプロジェクトのコードも閲覧可能。任意のプロジェクトのコードをインポートリンク可能
  - Pros
    - プロジェクト間のソースコード共有の促進
    - バージョン間の依存関係問題が起きにくい
    - 大規模なリファクタリングが可能
  - Cons
    - 専用ツールの開発・メンテが大変
    - ライブラリの依存関係の管理が大変
- ブランチを持たない開発ツリー
  - ソースコードの修正は全てメインラインに反映
  - リリースブランチのみ分ける（チェリーピックで必要な修正をメインラインから取り込む）
- 自動ビルドツールによるテスト駆動開発
  - Blaze(Bazelに似たビルドツールで依存関係と自動テストのルールを指定
  - コミット時の自動テストでは変更コードに依存する他の自動テストを全て実行
  - １日あたり1万3千個のプロジェクトにおける、約80万回のビルド処理と1億5000万回のテストを実施
  - 自動テストの工夫
    - 定期的に発生するチェックポイントでテストを実施(重複テストを削減)
      - リソース効率は良くなるがテスト結果が遅れるのでストレスになる
    - 依存関係が遠いテストの実行頻度を落とす
- ソースコードの更新プロセス
  - リポジトリ全体を(仮想的に)ローカルにコピー
  - ローカルで修正した内容をコードレビュー
  - レビュー終了後にリポジトリにコミット
  - レビュー前後に自動テストを実行
- コードレビューシステム
  - CL[^1]ごとに変更部分をレビュー
  - Critique(Gerrit[^2]に類似のレビューシステム)上で実施
- 軽量なレビュープロセス
  - レビューアのアサイン後、小さなもので1時間、大きなもので5時間いないにコメントを受け取る
  - 開発者は平均して週3時間のレビューを実施
  - 99%のCLでレビューアは5人以下、75%のコミットでレビューアでは1人
  - 90%のCLで変更されるファイルは10以下、35%のCLで変更されるファイルは1つ
  - 一つのコミットの変更行の中央値は24行、10%のCLで1行のみ変更
- コードレビューの目的
  - 他人が理解できるコードを書くこと
    - これが絶対の基準。開発者の入れ替わりが早いのでこれが最重要。
    - 理解できない場合は、「理解できない」と突き返せばよい

個人的な感想としては単一リポジトリとブランチを持たない開発ツリーは結構衝撃でした。勇気をもってメインラインに突っ込む！は大胆だなぁと思いましたが、後続の話を聞いて納得しました。要はローカルの修正結果を自動テストしてレビューしてもらうシステムがありきなんですね。一般的にはレビューしてもらうにはブランチを切ってコードレビューシステムと連動している共有リポジトリにプッシュしますが、Googleはコードをリポジトリに突っ込むことなくローカルのコードをレビューしてもらえるシステムがあるので、常にレビュー済みのソースのみがメインラインに突っ込まれるようです。まぁ、それでもメインライン一本の運用はすごいと思いますが・・・

あと、コードレビューの目的もシンプルでイイねをしたくなりました。コードレビューの目的を他人が理解できるコードを書いているかのみにすれば、それを徹底すればバグは明白になるし、開発者の入れ替わりでも問題が起きにくくなるので非常に効率的だと感じました。コードレビューのチェックリストをたくさん覚えるよりもこっちのほうが効果がありそうです。

上記のプレゼンは下記の公開資料にもとづくそうなので、いつか読んでみたいと思います。

- [Why Google Stores Billions of Lines of Code in a Single Repository](https://ai.google/research/pubs/pub45424)
- [Modern Code Review: A Case Study at Google](https://ai.google/research/pubs/pub47025)
- [Taming Google-Scale Continuous Testing](https://ai.google/research/pubs/pub45861)
- [Lessons from Building Static Analysis Tools at Google](https://ai.google/research/pubs/pub46576)

セッションの二本目はパネルディスカッションで、Googleエンジニアの経歴紹介やGCPとの関わり等を聞けて非常に興味深かったです。気になった話題で言えば、`Javaの"Write once, run anywhere"は嘘`[^3]というパワーワードが出ました。なぜこの話題が出てきたかというとGCPがアプローチを変えて`Write once, run anywhere`を達成したという矜持からだと思います。Googleのサービスは今や世界中で欠かせないインフラです。そしてGCPでコードを書けばGoogleのインフラに乗せて世界中に動くサービスを提供することができます。これは恐らくSunの達成したかった本質であり、GCPが誇っていい真実だと思います[^4]。

あと情報収集の仕方も話題になりました。Googleエンジニアでもブログ[^5]、SNS、RSS、SlideShar、Qiitaは一般的な情報源のようです。面白かったのはスマホのChromeでおすすめ記事の表示がトップ画面にでてきますが、これが意外と自分の興味にあった記事を勧めてくれるそうです。

[^1]: Change Listの略。一回のコミットに含まれる変更ファイル
[^2]: [Gerrit](https://www.gerritcodereview.com/)はGoogleが開発したOSSのコードレビューシステム。GerritはCritiqueを元にOSS化されたものらしい。
[^3]: Javaでクロスプラットホーム開発したことあるエンジニアになら大抵知っていることですが、まともな製品を開発をする場合は大抵JVMの下側がWindowsなのかLinuxなのか、はたまたAndroidなのかは当然意識します。要は`Write once, run anywhere`は言い過ぎってことです。特にインストーラ周りは壊滅的だし、UIは残念なことになります。というのも結局はJVMでは最大公約数的なアプローチしかできないから、それで事足りる分はいいのですが大抵はそれだけではうまくいかないからです。もちろんこれは当時のSun Microsystemsが掲げた理念に過ぎないのかもしれませんが、Java生誕から20年以上経った今でも達成されていないことを考えると完全に誇大広告だったということだと思います。
[^4]: GCPの場合スケールさせることができるので`Write once, run everywhere`の方が近いかもしれませんが、これもさすがに言い過ぎ感があるので忘れてください・・・
[^5]: 日本語ブログはありがたいのでブログ書いて！と訴えていました。このブログが届くとは思いませんが、まぁ書き続けたいと思います・・・

### 【祝】k8sデビュー！ エンタープライズ巨大アプリをマイクロサービス・コンテナ化。段階的移行(中)の全記録を追う。

　[【14-D-7】](https://event.shoeisha.jp/devsumi/20190214/session/1958/) *16:20～17:05 石田 健亮[ドリーム・アーツ]*

既存のJavaアプリをKubernetesを用いてマイクロサービス化する話でした。k8sを用いたモダナイズの事例としてとてもよい発表だったと思います。

- 旧環境
  - Angular,Velocity,Struts,俺々PersistenceAPI,MySQL
- 新環境
  - AKS, SpringBoot, kustomize, fluentd(サイドカーでログ収集、DaemonSetを使ってノード単位で立てる)
- 工夫した点
  - マイクロサービスは重い(実測で4倍遅い)
    - キャッシュを利用
    - 非同期、並列にする
- [Netflix OSS](https://netflix.github.io/)をチェキラ

<table align=center>
  <tr>
        <td width=150px>
      <img style="float:left;margin-right:.5em;" src="https://cdn.slidesharecdn.com/ss_thumbnails/20190214devsumislideshare-190215084801-thumbnail.jpg?cb=1550220608" alt="" width="120" />
    </td>

    <td width=400px>
      <div><a href="https://www.slideshare.net/knske/2019-k8s-131899507/knske/2019-k8s-131899507">デブサミ 2019 【祝】k8sデビュー！エンタープライズ巨大アプリをマイクロサービスコンテナ化</a></div>
    </td>
  </tr>
</table>

### 「ITエンジニアに読んでほしい！技術書・ビジネス書大賞 2019」プレゼン大会

　[【14-A-8】](https://event.shoeisha.jp/devsumi/20190214/session/1935/) *17:25～18:45*

密かに楽しみにしていたセッションです。やっぱり本を読むのって時間がかかるのでなるべくハズレは引きたくないものです。かといって売れているから自分にあっているとも限らないので悩ましいところですが、ここでは著者または関係者が読みどころをプレゼンしてくれるので、非常に参考になります。今日行われたプレゼンも非常に熱がこもっていて、実際に自分が投票した2冊は絶対に買おうと思いました[^6]。

<table align=center>
  <tr>
    <td width=150px>
      <img style="float:left;margin-right:.5em;" src="http://www.shoeisha.co.jp/static/campaign/award/2019/images/fb_image.png" alt="" width="120" />
    </td>
    <td width=400px>
      <div><a href="http://www.shoeisha.co.jp/campaign/award/2019/">ITエンジニアに読んでほしい！技術書・ビジネス書 大賞2019</a></div>
      <div><a href="http://www.shoeisha.co.jp/campaign/award/2019/">「ITエンジニアに読んでほしい！技術書・ビジネス書 大賞 2019」技術書・ビジネス書の各ベスト10を発表。大賞は</a></div>
    </td>
  </tr>
</table>

そして2019年の大賞は[この2冊](https://www.shoeisha.co.jp/campaign/award/2019/result/)に決定しました。おめでとうございます。

[^6]: 自分が投票した2冊とも大賞に選ばれました。技術書部門大賞の方は2日目の翔泳社の販売ブースで購入しました。読んだ感想とかいつかブログでまとめたいと思います。

## 2日目 参加セッション

2日目も午後からの参加でしたが、雪が降っていたので積もらないことを祈るばかりでした。雅叙園前から駅に向かう坂は激坂なので・・・

<img src="https://hinastory.github.io/cats-cats-cats/gallery/events/devsumi2019/devsumi-004.jpg"></img>

### 機械学習システムのアーキテクチャ アラカルト ～ BrainPad における実例を交えて～

　[【15-C-3】](https://event.shoeisha.jp/devsumi/20190214/session/1986/) *12:10～12:40 太田 満久[ブレインパッド]*

データ活用を生業としている会社からの機械学習の適用事例をおよびパターンの紹介で非常に参考になりました。一番のポイントはデータ分析が必要とされる場面でも機械学習はオーバースペックのケースが多々あって、その場合は古典的な統計処理を利用しようという事と、機械学習を利用する場合でもなるべく既成のAPIを利用するようにして、独自訓練は避けようというものでした。やはり独自訓練は大量のデータが必要だしコストも高いので、実践では費用対効果を考えながら必要な精度を見極めて、最低限の作り込みにする必要があるみたいです。途中の独自vs既成で出てきた [Cloud AutoML](https://cloud.google.com/automl/?hl=ja)は使ってみたいと思いました。

あとバッチ推論の方がオンライン推論よりも非機能要件がゆるくてデータサイエンティストが行うモデル設計の環境に近いというのもなるほどと思いました。推論はリアルタイムで行うものばかりだと思いこんでいましたが、要件さえあえばバッチ推論の方が問題は少なさそうです。

<table align=center>
  <tr>
        <td width=150px>
      <img style="float:left;margin-right:.5em;" src="https://cdn.slidesharecdn.com/ss_thumbnails/developerssummit2019bp-190215060341-thumbnail.jpg?cb=1550210832" alt="" width="120" />
    </td>

    <td width=400px>
      <div><a href="https://www.slideshare.net/BrainPad/ss-131876455">機械学習システムのアーキテクチャアラカルト</a></div>
    </td>
  </tr>
</table>

### エンジニアの皆さんに贈る最速キャリア戦略

　[【15-B-4】](https://event.shoeisha.jp/devsumi/20190214/session/1979/) *13:05～13:50 松本 勇気 [DMM.com]*

CTO大変ッスね・・・という感想がまず一言。生き急ぎたい人向けのセッションでした。自分は途中で振り落とされましたが、正論は正論なので生まれ変わったら実践できる人になってみたいです・・・

- AWS・GCP実弾演習場はマジうらやましぃ
- 暇なら仕事量増やしてください・・・
- カッツモデル・・・ヒューマンスキル・・・ツライ
- 全部Hello Worldはつらいよね？　取捨選択大事
- マネジメントはみんなが学ぶべき概念
- 正しい意見より、解決できる意見
- ITエンジニアとして学んだスキルは他の分野にも流用可能
  - 人はオブジェクトでメッセージパッシングで動いていると捉える
- 自分を知ってもらう。自分の能力・目標について、周囲は思ったほど知らない
  - ジョハリの窓
- 意思決定者が誰で、何で困っていて、何を目標として、何を考えているのか
  - それを知って自分がそこにどう貢献するかを考える
- 意に沿わなくとも、組織の意思決定内容に貢献する
  - 時間をすべて経験に変換する
  - 意思決定されたことに反対するのに無駄な時間を使うな
  - 文句があるなら意思決定に絡む努力をすること
    - 「正しいことをしたければ、偉くなれ」を思い出した・・・

<table align=center>
  <tr>
    
    <td width=400px>
      <div><a href="https://speakerdeck.com/ymatsuwitter/engineers-career-management-and-cto-role">Engineers Career Management and CTO role</a></div>
    </td>
  </tr>
</table>

### これをまだ知らない Web エンジニアへ贈る - 私が愛する Elixir/Erlang の楽しさと辛さ -

　[【15-D-5】](https://event.shoeisha.jp/devsumi/20190214/session/1996/) *14:10～14:55 幾田 雅仁 [gumi]*

すごい軽妙なトークで引き込まれました。まさしくElixirはWeb開発のための言語だと思います。 今年も[Erlang & Elixir Fest](https://elixir-fest.jp/)をやるそうなので、是非参加したいと思います[^7]。

- Pros(楽しさ)
  - Elixir　+ Phoenix はWeb開発に割り切れば学習容易
  - 適当に書いてもCPU(コア)を程よく使い切ってくれて、そこそこ速くて、安全
  - GCでシステム全体が止まることはない(プロセス[^8]単位でメモリを持ち、GCする)
- Cons(辛さ)
  - EVM[^9]は高機能だが、カッコいい機能は沼なので、Web開発時には無視すること
  - モジュールは誤解されがち。関数単位で考えること

[^7]: 過去2回は両方参加しています。もともとElixirはRuby on Railsのコミッターが作った言語で文法もRubyに似ていることからRubyユーザが多い印象です。
[^8]: ここで言うプロセスはOSのプロセスではなく、Elixirのプロセスです。一般的にはアクターと呼ばれる非同期処理の単位です。
[^9]: EVM=Erlang VM。ElixirはErlang言語の仮想機械(VM)であるEVM上で動作します。Java言語のVMであるJVM上で動作するKotlinやScalaのようなものです。


### サーバーレスで最高に楽しめるアプリ開発

　[【15-B-6】](https://event.shoeisha.jp/devsumi/20190214/session/1981/) *15:15～16:00 江藤 武司[Riotz Works]* [スライド](https://riotz.works/slides/?2019-devsumi)

リアルタイムの動画やフィードバックを始めて扱う場合でも24時間、3人で作れるよ、という感じのセッションです。楽しそうですね。肝はPWAとFirebaseとAWS(Lambda,DynamoDB)、SkyWayといったところでしょうか。サーバレスアーキテクチャなのでイベントドリブンでサービスをラムダで繋いでいく感じですが、そのことを`ピタゴラ装置`と言っていたのが非常に面白かったです。あとDynamoDBでレコードの生成イベントやTTLイベントをトリガにする話も参考になりました。サーバレスは基本的にポーリングではなくイベントを如何に活用するかがキーポイントなんだなと改めて感じました。

ちなみにサーバレスなので費用は使った分しかかからないわけですが、このようなイベントでもワンコイン(500円)程度しかかからないそうです。

### 無意味なアラートからの脱却 〜 Datadogを使ってモダンなモニタリングを始めよう 〜

　[【15-B-7】](https://event.shoeisha.jp/devsumi/20190214/session/1982/) *16:20～17:05 池山 邦彦[Datadog]*

Datadogを使った監視のお話です。Datadogはデフォルトの監視設定が豊富に提供されているので基本的なOSやアプリの監視で困るようなことはなさそうです。あと長年弱点と言われてきた外形監視ももうすぐ使えるようになるそうなので非常に楽しみです。余談ですが、Datadogの社員は犬派よりも猫派が多いらしいです。あと話題の [入門監視](https://www.oreilly.co.jp/books/9784873118642/)もやはりオススメらしいです。

- なぜ無意味なアラートが発生するのか
  - 監視する必要のないものは監視しない
  - 通知する必要のないものは通知しない
- モニタリングのポイント
  - ワークメトリクス
    - スループット, 成功, 失敗, パフォーマンス
  - リソースメトリクス
    - 使用率, 飽和度, 失敗, 可用性
  - イベント
    - 変更, アラートスケーリング
  - APM
  - ログ
- モニタリングの種類
  - 閾値, 外れ値(Outlier), 異常値検知(Anomaly), 予測(forecast), ログ, APM, 複合条件
- もう少しで対応予定
  - 外形監視
    - サービスが本当にReadyなのか確認できる

<table align=center>
  <tr>
        <td width=150px>
      <img style="float:left;margin-right:.5em;" src="https://cdn.slidesharecdn.com/ss_thumbnails/15b7devsumi2019dataog-190221084501-thumbnail.jpg?cb=1550738784" alt="" width="120" />
    </td>

    <td width=400px>
      <div><a href="https://www.slideshare.net/devsumi/15b7-datadog">【15-B-7】無意味なアラートからの脱却 ～ Datadogを使ってモダンなモニタリングを始めよう ～</a></div>
    </td>
  </tr>
</table>

### Webアプリのチューニングバトル「（社内）ISUCON」の魅力と楽しさ

　[【15-B-8】](https://event.shoeisha.jp/devsumi/20190214/session/1983/) *17:25～18:25  櫛井 優介[LINE]/古川 陽介[リクルートテクノロジーズ]/南 直[Wantedly]*

パフォーマンスチューニングバトルの [ISUCON](http://isucon.net/)のお話です。名前だけは聞いたことあって最初は海外コンテストをリスペクトしてるのかなと思っていましたが、どうやら日本発祥のコンテストだったみたいで元々の意味は椅子(ISU)を投げるから取ったみたいです。ちなみに正式名称は`Iikanjini Speed Up Contest`です。面白そうだったので過去問あさって見ようかなという気分にはなりました。優勝賞金100万円のISUCON9も開催が決まったようですが出場するかどうかは未定です・・・[^10]

[^10]: 最大の難関はいいチームが組めるかどうかですね・・・

## 場外バトル

場外でも熱いバトルと言うか、宗教戦争が繰り広げられていました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">デブサミ2019に出展ブースにて「あなたが好きなエディタ＆開発環境」アンケートまだまだ実施中です。<br>Visual Studio Codeが圧倒的人気！ここまで差が出るとは思いませんでした。<a href="https://twitter.com/hashtag/devsumi?src=hash&amp;ref_src=twsrc%5Etfw">#devsumi</a> <a href="https://t.co/0jlx3GFRf3">pic.twitter.com/0jlx3GFRf3</a></p>&mdash; 開発室/虎の穴ラボ (@toranoana_lab) <a href="https://twitter.com/toranoana_lab/status/1095961135566573568?ref_src=twsrc%5Etfw">2019年2月14日</a></blockquote>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">最終日の結果です😃Javaが強かった💪🏻<br>Java:304<br>JavaScript:285<br>Python:262<br>C#:194<br>Ruby:132<br>PHP:116<br>C++:89<a href="https://twitter.com/hashtag/devsumi?src=hash&amp;ref_src=twsrc%5Etfw">#devsumi</a> <a href="https://twitter.com/hashtag/language?src=hash&amp;ref_src=twsrc%5Etfw">#language</a> <a href="https://t.co/pLOESAXNc9">pic.twitter.com/pLOESAXNc9</a></p>&mdash; ymk9638 (@ymk9638) <a href="https://twitter.com/ymk9638/status/1096372588542971904?ref_src=twsrc%5Etfw">2019年2月15日</a></blockquote>

現場からは以上です[^11]。

[^11]: 自分はEmacs派です・・・あと好きな言語はRubyとScalaです。ただ機械学習の関係でPythonを使う機会も増えてます・・・

## まとめ

やはり参加して良かったです。特にGoogleの開発環境なんて今まで聞いたことがなかったので非常に面白かったです。また、このブログでは全然書ききれていませんが現場の空気感とかセッションの盛り上がりとか実際に参加してみないと分からないことだらけなので、もし機会があれば来年も参加したいと思います。

本記事はデブサミに参加したくても諸般の事情で参加できなかった人や、興味があるけどいろいろと悩んでいる人のためになるべく面白さが伝わるように心がけて書きました。その結果長文になってしまいましたが、本記事を読んでデブサミに興味を持っていただけば幸いです。

<img src="https://hinastory.github.io/cats-cats-cats/gallery/events/devsumi2019/devsumi-005.jpg"></img>

ちなみにデブサミ関連の資料は以下のリンクにまとまっていますのでご参考まで[^12]。

<table align=center>
  <tr>
    <td width=150px>
      <img style="float:left;margin-right:.5em;" src="https://codezine.jp/static/images/article/11383/11383_th.png" alt="" width="120" />
    </td>
    <td width=400px>
      <div><a href="https://codezine.jp/article/detail/11383">デブサミ2019、講演関連資料まとめ</a></div>
      <div><a href="https://codezine.jp/article/detail/11383">　翔泳社主催のソフトウェア開発者向けカンファレンス「Developers Summit 2019」（以下、デブサミ2019）の関連資料�</a></div>
    </td>
  </tr>
</table>

[^12]: 自分もこの記事を書く際に参考にさせて頂きました。ありがとうございました。


## QiitaのWeb画面で記事を書くのが辛かった話(ポエム)

さて、ここからがおまけと言うか本題です(笑)。最初この記事はデブサミの最中にQiitaに投稿してみようかと思い立ってQiitaのWeb画面で書き始めたものですが、あえなく挫折して結局[自分のブログ](https://hinastory.github.io/cats-cats-cats/2019/02/15/devsumi-2019-winter/)に投稿しました。挫折した理由は以下のとおりです。

- エディターのサポートがないのがツライです・・・
    - 自分のブログは静的サイトジェネレータの[Hexo](https://hexo.io/)を利用していて、VSCodeで記事を書いています
      - 記事を書いてローカルのブラウザで確認して問題なければGitHub Pagesで公開する流れです
  - キーバインドはEmacsで検索、置換、スニペット、スペルチェッカー等様々な機能を駆使して書いています
- 画像アップロードがツライです
  - 撮った写真はローカルでフォルダを作って名前付きで管理していますが、それをいちいちアップロードするのに手間がかかり、管理も面倒です・・・
- バージョン管理がないのがツライです・・・
  - ソフトウェアエンジニアならバージョン管理の重要性をご存知だと思います。。。
  - 普段のブログはGitを使ってこまめにコミットしています・・・
- ブログカードが使えないです・・・
  - ちょっとリッチなリンクにしたいとき[The Open Graph protocol](http://ogp.me/)でWebページのサムネイルやタイトルを引っ張ってきてブログカードを表示したいと思うときが記事を書いていると多々ありますが、Qiitaでは簡単にできないのでツライです・・・
- リッチなコンテンツを埋め込めないです・・・
  - 技術系の記事であればSlideShareやSpeakerDeckのスライド埋め込みたくなることがありますが、これができないようです・・・
  - oEmbedに対応すれば簡単なはずなんですが・・・なぜ対応していないのか正直よくわからないです。。。
  - [自分のブログ](https://hinastory.github.io/cats-cats-cats/2019/02/15/devsumi-2019-winter/)はスライドを埋め込んでいるので気になる方はこのページと比較してみてください
- 独自のタグの拡張ができないです・・・
  - 記事を書いているとMarkdown以外の独自の省略した記法とかを使いたくなるけどこれができないです・・・
  - たとえばGoogleドライブへの直リンクのための独自タグを作りたいとか・・・
  - Hexoでは独自タグが作れるので自分はoEmbedのタグを作って[npmで公開しています](https://hinastory.github.io/cats-cats-cats/2019/02/07/hexo-oembed/)

いろいろ不満ばかり書いてしまいましたが、Qiitaの技術記事の共有の場としての役割は非常に重要だと思っていて、自分も普段たくさんお世話になっていて感謝しています。ただそれだけに少し勿体無いと感じていて、上記のような制約が少しでも緩和されれば、Qiitaを利用するみんながもっとアウトプットしようと思うのではないかと思いました。

理想で言えばVSCodeの拡張にQiitaモードがあって、そこで記事を書けば自動的にQiitaと連動してプレビューが見れたり投稿できたりとか、独自タグの拡張が作れるようになって、独自タグのマーケットプレイスとかエコシステムが出来上がるとか・・・そんな未来が来ればもっとアウトプットが楽しくなるのではないかと妄想していました。

最後になりましたが、この転載記事は最後のポエム以外は元のHexoのブログ記事の独自タグを無理やりQiitaでなんとか表示できるようにスクリプトで変換したものです。需要があるかどうかはわかりませんが、とりあえずスクリプトは[Gist](https://gist.github.com/hinastory/832dbf87956a57d4787ff548b94ba48b)に貼っておきましたので興味があればご覧ください。

ポエムは以上です・・・