<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>オープンソース on Data Visualization Japan</title>
        <link>https://data-visualization.jp/tags/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9/</link>
        <description>Recent content in オープンソース on Data Visualization Japan</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja-jp</language>
        <lastBuildDate>Mon, 28 Dec 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://data-visualization.jp/tags/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>大野 圭一朗／今あえてコードから可視化を作る場合のツール</title>
        <link>https://data-visualization.jp/code-based-viz-tools/</link>
        <pubDate>Mon, 28 Dec 2020 00:00:00 +0000</pubDate>
        
        <guid>https://data-visualization.jp/code-based-viz-tools/</guid>
        <description>&lt;p&gt;Data Visualization Japan Meetup 2020（2020年12月28・29日開催）における、大野 圭一朗さん（カリフォルニア大学サンディエゴ校 医学部）の講演です。生物学研究のためのツール開発という立場から、現代のコードベース可視化の実践を紹介します。&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/Sgs96_gCLMk&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;カリフォルニア大学サンディエゴ校の医学部で勤務しています、大野と申します。&lt;/p&gt;
&lt;p&gt;大学に勤務していると言っても&lt;strong&gt;研究者ではなく、あくまでソフトウェア開発者&lt;/strong&gt;という立場です。大学はある種の非営利団体なので、その中に他の団体と共同でいろんなプロジェクトが立ち上がり、そちらの組織にも名前が入っていたりするのですが、基本的にはサンディエゴをベースに大学の中でソフトウェアを開発しています。&lt;/p&gt;
&lt;p&gt;この会はオーディエンスの方がいろんな分野から来られているので、&lt;strong&gt;テクニカルなことばかりに集中してもなかなか面白くない可能性がある&lt;/strong&gt;ので、今回は長めのイントロとして私がやっているようなことをお話ししながら、最終的に技術的な部分を紹介する、という形で進めたいと思います。&lt;/p&gt;
&lt;h2 id=&#34;生物学と可視化&#34;&gt;生物学と可視化
&lt;/h2&gt;&lt;p&gt;研究室のタイトル的なものは、以前は「&lt;strong&gt;ネットワークバイオロジー&lt;/strong&gt;」を掲げていましたが、今はもっと広く「&lt;strong&gt;ゲノミクス&lt;/strong&gt;」というカテゴリーで考えていただければいいと思います。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ゲノミクスという性質上、生物すべてに共通するもの&lt;/strong&gt;なので、扱う生物種は本当にいろいろです。もともとは技術的な制約から&lt;strong&gt;酵母&lt;/strong&gt;などから始まって、今は人間の疾患や哺乳類の研究をしている研究者もたくさんいます。&lt;/p&gt;
&lt;h3 id=&#34;2020年という特殊な年&#34;&gt;2020年という特殊な年
&lt;/h3&gt;&lt;p&gt;2020年の主役はこれですよね——&lt;strong&gt;コロナウイルスの実際の遺伝配列（シーケンス）&lt;/strong&gt; です。&lt;/p&gt;
&lt;p&gt;そういうこともあって、今年は一般のメディアも含めて&lt;strong&gt;生物学に関係する用語が飛び交った年&lt;/strong&gt;だったと思います。&lt;strong&gt;PCR（ポリメラーゼ連鎖反応）&lt;/strong&gt; という言葉を聞かない人はいないでしょうし、それに使う&lt;strong&gt;プライマー&lt;/strong&gt;、ゲノムを解析してウイルスの&lt;strong&gt;系統樹&lt;/strong&gt;を作る技術、そしてワクチンの話題で &lt;strong&gt;mRNA&lt;/strong&gt; という言葉が毎日登場する。&lt;/p&gt;
&lt;p&gt;私たちは特定の生物種を研究しているというより、&lt;strong&gt;汎用的に使える手法——いわゆるバイオインフォマティクス——でいろんな生物種を研究している&lt;/strong&gt;ので、COVID-19 に関する共同研究者の仕事を紹介しながら、可視化との関わりをお話しします。&lt;/p&gt;
&lt;h3 id=&#34;生物学のデータはほぼすべて公開されている&#34;&gt;生物学のデータはほぼすべて公開されている
&lt;/h3&gt;&lt;p&gt;生物学分野のデータは、特殊なものを除いて&lt;strong&gt;ほぼすべて公開データとして誰でもアクセスできる&lt;/strong&gt;ようになっています。&lt;/p&gt;
&lt;p&gt;リンクの先へ行くと、実際に&lt;strong&gt;リファレンスのゲノム&lt;/strong&gt;——このコロナウイルスのゲノムデータにアクセスできます。ウイルスというのは非常に効率がいいと言ったら変ですが、&lt;strong&gt;情報量としては本当に3万文字くらいで表せるゲノム情報で、今の世界をぐちゃぐちゃにしている&lt;/strong&gt;という感じです。&lt;/p&gt;
&lt;p&gt;データとしては本当に単純で、&lt;strong&gt;FASTA&lt;/strong&gt; という名前のフォーマットで、情報量もそれほど大きくありません。&lt;/p&gt;
&lt;p&gt;ただ、元のファイルには &lt;strong&gt;ATGC という文字列が並んでいるだけ&lt;/strong&gt;で、**これを見て何か分かる人間は基本的にいません。**なのでコンピュータの力を借りて、今わかっている情報をその上に乗せたり、&lt;strong&gt;ゲノムブラウザ&lt;/strong&gt;というインタラクティブなツールを使ったりしながら、研究者は日々研究しているわけです。&lt;/p&gt;
&lt;h3 id=&#34;タンパク質相互作用ネットワーク&#34;&gt;タンパク質相互作用ネットワーク
&lt;/h3&gt;&lt;p&gt;ウイルスが人間に対して何か悪さをして、最終的に疾患として現れる——それがなぜ起こるかというと、&lt;strong&gt;ウイルスのタンパク質と、ホストである人間側のタンパク質が何らかの相互作用を行う&lt;/strong&gt;からです。&lt;/p&gt;
&lt;p&gt;そういうものを解析するとき、&lt;strong&gt;相互作用はグラフ＝ネットワークとして表せる&lt;/strong&gt;ので、&lt;strong&gt;シンプルなネットワーク図で全体のインタラクションを把握できるようにする&lt;/strong&gt;わけです。&lt;/p&gt;
&lt;p&gt;この論文では、網羅的に解析した結果をネットワーク図として表しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;薬というのは「この病気が出てきたからすぐ作ろう」というのは無理&lt;/strong&gt;だというのは、今年の状況を見てこられた方は皆わかると思います。開発に非常に時間がかかるのに対して、ウイルスは待ってくれない。&lt;/p&gt;
&lt;p&gt;そこで研究者や医師が最初に考えるのは——&lt;strong&gt;すでに臨床試験が終わって他の病気に使われている薬があって、それが同じような作用機構で同じようなタンパク質をターゲットにするなら、この病気にも使えるんじゃないか&lt;/strong&gt;ということ。この &lt;strong&gt;ドラッグリパーパシング&lt;/strong&gt;の研究でこういったネットワーク可視化が実際に使われています。&lt;/p&gt;
&lt;p&gt;余談ですが、この論文は&lt;strong&gt;被引用数が970&lt;/strong&gt;。&lt;strong&gt;せいぜい半年ほどでこんな引用数が出るのは普通ではない&lt;/strong&gt;ので、いかに今、世界中の研究者がこの部分に寄ってたかって研究しているかが端的に分かる数字だと思います。&lt;/p&gt;
&lt;h3 id=&#34;生物学で使われる可視化の種類&#34;&gt;生物学で使われる可視化の種類
&lt;/h3&gt;&lt;p&gt;ネットワークは生物学で使われる可視化のごく一部です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;アライメントビュー&lt;/strong&gt; ——塩基配列やアミノ酸配列を比較するとき。昔は目でやっていた時代もあったようですが、基本は機械で並べて、&lt;strong&gt;どこが変異しているのか&lt;/strong&gt;を目で見られるようにする&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ゲノムブラウザ&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;タンパク質の構造ビューア&lt;/strong&gt; ——タンパク質は&lt;strong&gt;3次元構造の状態によって働きが決まる&lt;/strong&gt;ので、その3次元の状態を見られるようにする&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ネットワーク図&lt;/strong&gt; ——相互作用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;系統樹&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Nextstrain&lt;/strong&gt; に行くと、系統樹と世界中への伝播をダッシュボード的に作り上げたソフトウェアがあります。&lt;strong&gt;研究ツールと報道ツールの中間くらい&lt;/strong&gt;という印象を私は受けました。生物学で使うツールは、&lt;strong&gt;複数の異なった形のデータを統合してダッシュボード的にし、そこで探索的な可視化を行う&lt;/strong&gt;ということが割と頻繁に起こります。&lt;/p&gt;
&lt;h3 id=&#34;データ型と可視化手法の対応&#34;&gt;データ型と可視化手法の対応
&lt;/h3&gt;&lt;p&gt;COVID-19 関連研究で使われる情報を、コンピュータの用語に置き換えると——&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;生物学のデータ&lt;/th&gt;
          &lt;th&gt;計算機的には&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;遺伝子配列&lt;/td&gt;
          &lt;td&gt;文字列&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3次元構造&lt;/td&gt;
          &lt;td&gt;座標＋文字（アミノ酸）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;薬剤との相互作用&lt;/td&gt;
          &lt;td&gt;グラフ構造&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;感染経路&lt;/td&gt;
          &lt;td&gt;グラフ構造&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;系統樹&lt;/td&gt;
          &lt;td&gt;ツリー&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;つまり——&lt;strong&gt;ウイルスの研究に限らず、計算機はある種、生物を研究するためのインフラ的な立場&lt;/strong&gt;になっている。だから私のような立場の人間が存在するわけで、&lt;strong&gt;本業は生物学者のためのツールやインフラを整えること&lt;/strong&gt;です。&lt;/p&gt;
&lt;h3 id=&#34;余談--犬の年齢&#34;&gt;余談 ― 犬の年齢
&lt;/h3&gt;&lt;p&gt;私の職場から出た論文の一つに面白いものがあって、ニューヨーク・タイムズでも記事になりました。&lt;/p&gt;
&lt;p&gt;昔から「&lt;strong&gt;人間と犬の年齢を比べるときは7を掛ければいい&lt;/strong&gt;」という説がありました。俗説なのかサイエンスのデータに基づいたものなのか私は知らないのですが、&lt;strong&gt;実際に調べてみるともう少し違うカーブを描くんじゃないか&lt;/strong&gt;、というのを私の職場の大学院生が論文にして出したんです。犬という身近な動物を使った研究だったこともあって、日本語でもニュースになっているのを見つけました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ゲノミクスは生物に共通する基盤を研究している&lt;/strong&gt;ので、生物種としては本当にいろんなものを扱っています。とはいえ&lt;strong&gt;研究予算が集中するのは難易度の高い疾患&lt;/strong&gt;なので、どうしてもがんなどを研究する場合が多いです。&lt;/p&gt;
&lt;h2 id=&#34;私たちの仕事&#34;&gt;私たちの仕事
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;遺伝子から、最終的に生物上に現れるフェノタイプ（表現型）を予測したり、その関連性を調べたり&lt;/strong&gt;——そういったことを計算機を使って研究している職場です。&lt;/p&gt;
&lt;p&gt;中でも私たちは&lt;strong&gt;ネットワークやパスウェイ&lt;/strong&gt;——化学物質と人間のタンパク質、あるいはタンパク質同士が集合したコンプレックス、そういったもの同士の&lt;strong&gt;反応経路や作用の仕組み&lt;/strong&gt;を中心に研究しています。がんの研究、DNA のダメージを修復する機構、老化とは何か——そういうものを分子生物学的に研究しているのを、計算機側からサポートしています。&lt;/p&gt;
&lt;p&gt;実際に何をやっているかというと——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;解析の部分&lt;/strong&gt;：研究者が書いたプロトタイプ的なコードやアルゴリズムを、&lt;strong&gt;一般の生物学者が使えるようなツールにまとめる&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可視化の部分&lt;/strong&gt;（私が主にいるチーム）：&lt;strong&gt;新しい可視化手法そのものを開発・研究するのではなく&lt;/strong&gt;、可視化研究者が作ってある程度評価の定まった手法を組み合わせて、&lt;strong&gt;より複雑な探索的可視化ができるアプリケーションを作る&lt;/strong&gt;。あるいは論文に合わせてカスタムのツールを作って最終的な図を作成する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;バイオインフォマティクスという言葉は分かりにくいのですが、&lt;strong&gt;やっていることは意外と地味で、普通のソフトウェアエンジニアがやっているようなこと&lt;/strong&gt;です。&lt;/p&gt;
&lt;h3 id=&#34;インフラ整備とお金&#34;&gt;インフラ整備とお金
&lt;/h3&gt;&lt;p&gt;インフラ整備には必ずお金の問題が出てきます。**こういうソフトウェアは基本的にそれ自身がお金を生みません。**使う人が多くても、その人からお金を取るというよりは、&lt;strong&gt;どこかからお金をもらってきて開発する&lt;/strong&gt;という形になります。&lt;/p&gt;
&lt;p&gt;毎年いろんなグラント（助成金）に応募するのですが、面白いファンディングソースとして &lt;strong&gt;Chan Zuckerberg Initiative&lt;/strong&gt; があります。Facebook のザッカーバーグさんと奥さんがやっている慈善団体で、そこが「&lt;strong&gt;Essential Open Source Software for Science&lt;/strong&gt;」という枠を作って、&lt;strong&gt;科学研究の分野で広くインフラ的に使われているソフトウェアに対してお金を出しましょう&lt;/strong&gt;という基金を運営しています。&lt;/p&gt;
&lt;p&gt;私たちも応募して通ったのですが、サイトを見ると &lt;strong&gt;pandas、Bokeh、NumPy、Jupyter、Binder&lt;/strong&gt; など、聞いたことがあるプロジェクトがいくつもあります。&lt;strong&gt;これだけ広く使われているソフトウェアでも、持続的に開発していくのは難しいという現状&lt;/strong&gt;があるので、非常にありがたい基金です。&lt;strong&gt;日本も含めて、起業家の方なども含めてこういったサポートができるといいな&lt;/strong&gt;と思ったりしました。&lt;/p&gt;
&lt;h3 id=&#34;作っているもの&#34;&gt;作っているもの
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;NDEx&lt;/strong&gt; ——生物学方面で使うネットワークやパスウェイの共有サイトのようなものです。&lt;strong&gt;Pfizer や Roche&lt;/strong&gt; といった製薬会社も資金を出してくれています。パブリックにできないデータについては、彼らが自前のサーバーにデプロイして機密性のあるデータをそちらで使う。それとは別に私たちがパブリックのサーバーも運営していて、&lt;strong&gt;キュレーターが、たとえば今年なら COVID-19 関連の信頼性のあるネットワークデータをコレクションとしてまとめる&lt;/strong&gt;、といったことをしています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cytoscape&lt;/strong&gt; ——汎用のネットワーク可視化ソフトです。比較的大規模なものから、人間が手で描くようなパスウェイ図まで可視化できます。&lt;strong&gt;もともとは私のボスが2003年ごろに開発し始めたもので、2020年現在も続いている。この「継続させる」というのが非常に難しいのがこの分野のソフトウェアの特徴&lt;/strong&gt;ですが、なんとか生き残っています。&lt;/p&gt;
&lt;h2 id=&#34;カスタムツールを作る&#34;&gt;カスタムツールを作る
&lt;/h2&gt;&lt;p&gt;私たちに関して言うと&lt;strong&gt;探索的な可視化ツールを作る&lt;/strong&gt;のですが、データの特殊性もあってニーズが複雑で、&lt;strong&gt;研究者が見たいものも研究内容によってだいぶ変わる&lt;/strong&gt;ので、カスタムのツールを作る必要性はずっとあります。&lt;/p&gt;
&lt;p&gt;最近作っているのが &lt;strong&gt;HiView&lt;/strong&gt; です。&lt;strong&gt;巨大なネットワークに対して階層的なクラスタリングを行い、その階層を circle packing で表現して、どんどん展開して中に入っていけるブラウザ&lt;/strong&gt;と、それに対応する各種データを表示するダッシュボードです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただ、技術的な要素を見ていくと特殊なことは何もやっていません。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;階層構造の部分：&lt;strong&gt;D3 の circle packing&lt;/strong&gt; をベースに、インタラクションを後から追加&lt;/li&gt;
&lt;li&gt;ネットワーク（node-link diagram）：&lt;strong&gt;Cytoscape.js&lt;/strong&gt;（これも私たちのチームが作っている JavaScript ライブラリ）&lt;/li&gt;
&lt;li&gt;バーチャートなど：1から作る必要もないので &lt;strong&gt;react-vis&lt;/strong&gt;（Uber が最初に作ったライブラリ）&lt;/li&gt;
&lt;li&gt;UI：&lt;strong&gt;Material-UI&lt;/strong&gt;（大元のデザインは Google、オープンソースの実装として React で使える）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使っている技術の要素は本当にシンプル&lt;/strong&gt;です。つまり——&lt;strong&gt;基本的なパターンはだいたい有り物のツールでカバーできる。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**データの種類と量が決まれば、自ずと使える手法が決まり、最近は実装まで手に入る。**このあたりは昔に比べるとずいぶん楽になったと思います。&lt;/p&gt;
&lt;p&gt;手法についても、**何を見せたいかがあって、データの種類と量が決まれば、「これは散布図」「これはヒストグラム」とかなり自動的に決まってくる。**チートシートのようなサイトもいくつかあるので、&lt;strong&gt;必要なものが実装も含めて手に入るかをまず調べるのが、最近は大事&lt;/strong&gt;になってきています。&lt;/p&gt;
&lt;h3 id=&#34;それでも自分でコードを書く必要があるケース&#34;&gt;それでも自分でコードを書く必要があるケース
&lt;/h3&gt;&lt;p&gt;大きく3つだと思います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;大量のデータがある&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;比較的複雑なインタラクションが必要&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可視化手法自体を作らなければならない&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;3つ目はどちらかというと可視化自体を研究している研究者の領域なので、私はあまり踏み込みません。今日は&lt;strong&gt;1と2&lt;/strong&gt;について実例を交えてお話しします。&lt;/p&gt;
&lt;h3 id=&#34;問題の複雑さ&#34;&gt;問題の複雑さ
&lt;/h3&gt;&lt;p&gt;一番簡単なのは&lt;strong&gt;単一種類のデータを可視化したい&lt;/strong&gt;というケース。これは Excel でもライブラリでも比較的簡単に作れます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;データ型が増えれば、それに対応する違う種類のチャートを作らなければならない。&lt;strong&gt;逆に&lt;/strong&gt;データは単一でもものすごい量がある&lt;/strong&gt;と、既存の手法にただ読み込ませるだけで大丈夫か、というケースが出てくる。&lt;/p&gt;
&lt;p&gt;そして&lt;strong&gt;大量の、いろんな種類のデータをそれぞれ相互につなげて、アクションに基づいて見え方が変わる&lt;/strong&gt;——そうなるとかなり複雑になっていきます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;私が主に作業しているのはこのあたりで、構成要素自体は1から作らなくても、量的な問題や特殊なインタラクションに時間を割いています。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;-複雑なインタラクション--plotly-dash&#34;&gt;① 複雑なインタラクション ― Plotly Dash
&lt;/h2&gt;&lt;p&gt;**Tableau のようなコマーシャルツールでもある程度双方向性のあるダッシュボードは作れます。**もちろん限界があって、&lt;strong&gt;描きたいコンポーネントがなかったり、必要なインタラクションがなかったり&lt;/strong&gt;する場合はどうしても自分で書かざるを得ない。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただ、ほとんどの人——特に分析自体をやって最終的な可視化まで作っている人——にとって、JavaScript で1から書くのはハードルが高い。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;いま、データ分析者にとって &lt;strong&gt;Python&lt;/strong&gt; は非常に大きな存在です。&lt;strong&gt;「Python で1から書けてしまえば楽だろうな」と思っている人は多い&lt;/strong&gt;と思います。&lt;/p&gt;
&lt;p&gt;そこで &lt;strong&gt;Plotly Dash&lt;/strong&gt; です。&lt;strong&gt;JavaScript を書かなくてもインタラクティブな Web アプリケーション／ダッシュボードが作れてしまう&lt;/strong&gt;ツールキットです。&lt;/p&gt;
&lt;p&gt;Plotly（カナダの会社だと思います）のビジネスモデルはエンタープライズエディションの方で、&lt;strong&gt;可視化部分はオープンソース&lt;/strong&gt;なので、Dash も基本機能は全部フリーで使えます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;実例を見るのが一番早い&lt;/strong&gt;と思いますが、基本的な部品が全部揃っているので、&lt;strong&gt;それを組み合わせて割と複雑なダッシュボードを Python のみで構築できる。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;今は「1か0か」ではなく、こういう中間的なツールキットもある&lt;/strong&gt;ので、データ分析側にいる人はこのあたりも考慮するといいと思います。&lt;/p&gt;
&lt;p&gt;ちょっとびっくりしたのですが、**英語の書籍も出ていないような気がするのに、日本語で書籍が出ていました。**興味がある方は見てもらうと実際どういうものか分かると思います。&lt;/p&gt;
&lt;p&gt;また、Plotly から&lt;strong&gt;私たちのカナダのコラボレーター&lt;/strong&gt;——Cytoscape.js を作っている同僚——にアプローチがあって、&lt;strong&gt;Cytoscape.js を Dash で使えるコンポーネント「Dash Cytoscape」&lt;/strong&gt; が用意されています。その解説もこの日本語書籍にはかなりページを割いて書いてあります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;もちろん限界はあって、描画部分までいじりたくなると、最終的にはモダンフロントエンドと呼ばれるジャングルに入るしかない。&lt;strong&gt;ただ&lt;/strong&gt;そこまで行く前に、今公開されているコンポーネントで目的のアプリケーションが作れるかどうかをちゃんと試した方がいい。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;私の同僚もこれで作り始めたのはいいけれど、データ量的に対応できなくて最終的に私に仕事が回ってきたこともある&lt;/strong&gt;ので、そのあたりの見積もりも大事です。&lt;/p&gt;
&lt;h2 id=&#34;-大量のデータ--deckgl&#34;&gt;② 大量のデータ ― deck.gl
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;可視化のアプリケーションを書く＝ほぼ Web ブラウザで見る&lt;/strong&gt;という流れになってきています。&lt;/p&gt;
&lt;p&gt;私は&lt;strong&gt;ネットワーク描画&lt;/strong&gt;をかなり長く扱っているのですが、&lt;strong&gt;100万や200万といったノード・エッジをシンプルな node-link diagram で表す&lt;/strong&gt;——そんなものをブラウザで実行するのは、&lt;strong&gt;昔はあまり考えられませんでした。今は技術的に可能になってきている。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;ユースケース&#34;&gt;ユースケース
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;エッジ数の多い密なネットワークを、シンプルに node-link で表示したい。でも数がめちゃくちゃ多い。&lt;strong&gt;そして&lt;/strong&gt;全体の傾向を見たい&lt;/strong&gt;——クラスタリングを施した後、クラスター同士が密に固まった状態をざっと表示して、&lt;strong&gt;同時に Google マップのようにズームイン・ズームアウトもできるといいよね&lt;/strong&gt;という、&lt;strong&gt;無茶なお願いをしてくる人がいる&lt;/strong&gt;わけです。&lt;/p&gt;
&lt;p&gt;有り物で自由にそういうことができるものはないので、&lt;strong&gt;作るとしたらどのくらいの手間か&lt;/strong&gt;を考え始めました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;私たちは最終的なアプリケーションを作る人間で、解きたい課題があってそれに技術を持ってくる形&lt;/strong&gt;なので、&lt;strong&gt;CG の専門家もいないし GPU に詳しい人間もいない。&lt;strong&gt;できるだけ&lt;/strong&gt;ハイレベルな API を持つライブラリ&lt;/strong&gt;があればな、と探していたところ——都合のいいものがありました。&lt;/p&gt;
&lt;h3 id=&#34;deckgl&#34;&gt;deck.gl
&lt;/h3&gt;&lt;p&gt;もともと &lt;strong&gt;Uber&lt;/strong&gt; が作っていたライブラリです。&lt;/p&gt;
&lt;p&gt;彼らのサイトを見ると**地理空間データの例が非常に多い。**日本だと食べ物の配達のイメージが強いと思いますが、&lt;strong&gt;彼らがメインで最初に始めたのは配車サービス&lt;/strong&gt;なので、そちらのデータを可視化したい欲求があったのだと思います。&lt;/p&gt;
&lt;p&gt;**ただ実際は汎用的なツールです。**もともと Uber で作られましたが、&lt;strong&gt;今後は比較的オープンな体制で作っていくことも決定している&lt;/strong&gt;ようなので、ロックインもあまり心配しなくて大丈夫だと思います。&lt;/p&gt;
&lt;p&gt;deck.gl を使った例として &lt;strong&gt;kepler.gl&lt;/strong&gt; があります。地理空間データを手間少なく地図に重ねて表示できるツールで、&lt;strong&gt;下で走っているのが deck.gl&lt;/strong&gt; です。&lt;/p&gt;
&lt;p&gt;**よく間違われるのですが、例が地理空間可視化ばかりなだけで、実際は汎用のツールキットなのでいろんなことができます。**Uber は自動運転の研究もやっていたので、&lt;strong&gt;その結果を可視化するようなものも全部これで作っている&lt;/strong&gt;と、開発者のワークショップで聞きました。&lt;/p&gt;
&lt;h3 id=&#34;なぜ自分たちで作ろうと思ったか&#34;&gt;なぜ自分たちで作ろうと思ったか
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;100万を超えるエッジやノードを持ったデータの概要（オーバービュー）を見たい&lt;/strong&gt;というのが主なモチベーションです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;クラスター同士がそれぞれ近い場所に集まって、カラーコーディングされて、必要に応じてさらにデータレイヤーを上に乗せられる&lt;/strong&gt;——そういう&lt;strong&gt;巨大な白地図のようなものが作れればいいな&lt;/strong&gt;というので始まりました。&lt;/p&gt;
&lt;h3 id=&#34;deckgl-の考え方--レイヤーの集合&#34;&gt;deck.gl の考え方 ― レイヤーの集合
&lt;/h3&gt;&lt;p&gt;deck.gl は&lt;strong&gt;レイヤーの集合&lt;/strong&gt;で作ります。基本的な考えは「&lt;strong&gt;可視化したいものを、いくつかのレイヤーに分割して表現できないか&lt;/strong&gt;」。散布図用のレイヤー、直線を引くだけのシンプルなレイヤー——そういうプリセットを重ね合わせて作ります。&lt;/p&gt;
&lt;p&gt;グラフを描画したい場合は、&lt;strong&gt;ノードを表示し、ラベルを付け、ノード同士を線で繋ぎ、必要に応じて背景を描く。&lt;strong&gt;つまり&lt;/strong&gt;ノードレイヤーとエッジレイヤーを別々に既存のもので作ればいい。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;技術スタックは下から——&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;WebGL&lt;/strong&gt;（ブラウザ技術）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;luma.gl&lt;/strong&gt;（Uber が作った、WebGL に対するもう少し高レベルな API のラッパー）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deck.gl&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;レイヤー自体の描き方は割と簡単に切り替えられる&lt;/strong&gt;ので、2次元から3次元に切り替えて、&lt;strong&gt;複数のレイヤーが重なった3次元空間の表現——2.5次元と呼んだりします——もやろうと思えばできます。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;実例&#34;&gt;実例
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;40万ノードくらい&lt;/strong&gt;のものです。&lt;strong&gt;あらかじめ Python でクラスタリングを施し、レイアウトしたものを描画しています。&lt;strong&gt;さすがに&lt;/strong&gt;分析やレイアウトをオンザフライでやるのは現実的ではない&lt;/strong&gt;ので、そこは別でやっています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただズームやパンといった基本的な部分については、このくらい何も考えずにやっても普通に描けるパフォーマンスが、今の機械・ライブラリ・ブラウザのおかげで出るようになっている。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;50万ノード&lt;/strong&gt;くらい入れると、ここまで行くと&lt;strong&gt;もう単なるメッシュにしか見えない&lt;/strong&gt;のですが、&lt;strong&gt;何も考えずとも比較的こういうものを deck.gl で作れる&lt;/strong&gt;ということが確認できました。&lt;/p&gt;
&lt;h3 id=&#34;d3js-とどう違うのか&#34;&gt;D3.js とどう違うのか
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;ちゃんとライブラリに合った役割を割り当てるのが大事&lt;/strong&gt;です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;D3.js&lt;/strong&gt;：&lt;strong&gt;カラーパレットの生成や circle packing の計算といった、数学的なライブラリとして使う&lt;/strong&gt;のは今でも非常に便利。&lt;strong&gt;それが今後のメインの使い方として正しくなってくる&lt;/strong&gt;と思います&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deck.gl&lt;/strong&gt;：&lt;strong&gt;ひたすら力技で大量のデータを描く&lt;/strong&gt;ユースケースに異常に向いている&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし&lt;strong&gt;巨大なデータを一気に描画する場合、その場で解析やレイアウトを行うのは現実的ではない&lt;/strong&gt;ので、&lt;strong&gt;その部分は大きな計算機であらかじめ計算しておいて、どこかに蓄積する。&lt;strong&gt;こういう&lt;/strong&gt;役割分担が今後は大事&lt;/strong&gt;になってくると思います。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;D3.js でチャートを作る作業自体は面白い&lt;/strong&gt;んですけれども、&lt;strong&gt;最近はいろんなものがすでにあるので、既存のものを利用する。「自前で作らないと気が済まない」という欲求と戦うのが、今後は結構大事&lt;/strong&gt;だと思います。&lt;/p&gt;
&lt;p&gt;今の段階では単純にメモリに流し込んだものを無理やり描いているだけなので、実用的なアプリケーションにするには、&lt;strong&gt;1000万といったオブジェクトがあってもダイナミックにロードすれば、ブラウザでも十分扱える&lt;/strong&gt;はずで、そういう仕組みができないかを今やっている最中です。&lt;/p&gt;
&lt;p&gt;生物学的な話からスタートしましたが、まとめとしては——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;比較的複雑なアプリケーションを作る場合でも、必要なツールキットは非常によく整備されている。まずそれを使えないかよく考える&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;足りない場合は、中間的な Dash を使う&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;それでもできない場合は、deck.gl で自前のレンダリングを書く&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;作る側としてはどんどん便利な世界になってきている&lt;/strong&gt;ので、ぜひこのあたりも試してみてください。以上です。&lt;/p&gt;</description>
        </item>
        <item>
        <title>小副川 健／東京都新型コロナウイルス感染症対策サイトの開発に携わった話</title>
        <link>https://data-visualization.jp/tokyo-covid-site/</link>
        <pubDate>Mon, 28 Dec 2020 00:00:00 +0000</pubDate>
        
        <guid>https://data-visualization.jp/tokyo-covid-site/</guid>
        <description>&lt;p&gt;Data Visualization Japan Meetup 2020（2020年12月28・29日開催）における、小副川 健さん（株式会社ユーザベース／Code for Japan）の講演です。「東京都新型コロナウイルス感染症対策サイト」の初期開発に携わった立場から、技術選定と開発コミュニティの運営を振り返ります。&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/TSkP6qF_l0Q&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;株式会社ユーザベース、および Code for Japan の小副川が発表させていただきます。よろしくお願いいたします。&lt;/p&gt;
&lt;p&gt;タイトルは「東京都新型コロナウイルス感染症対策サイトの開発に携わった話」です。今回のミートアップのテーマでもある「話題になった可視化コンテンツ」ということでキャスティングいただいたのかなと思いますが、私は&lt;strong&gt;特に初期にかなり深く携わっていた&lt;/strong&gt;ので、その頃に何を考えながらサイトを作っていたか、というお話ができるといいなと思っております。&lt;/p&gt;
&lt;p&gt;**先にネタバラシしてしまうと、可視化のコンテンツとしては全然特別なものではありません。**可視化の研究レベルの話や技術的に高度な話を期待されると「すみません」という感じになってしまうのですが、&lt;strong&gt;可視化をして人に情報を伝えるという、可視化のベーシックな機能の部分&lt;/strong&gt;については果たせていた面もあるのかなと思い、その軸でまとめてみました。&lt;/p&gt;
&lt;p&gt;ただ、組み立ててみるとあまり可視化だけの話にはならず、どちらかというと&lt;strong&gt;シビックテック&lt;/strong&gt;——データや ICT を使って地域課題を解決していく活動——の色が強い話になります。&lt;/p&gt;
&lt;h2 id=&#34;自己紹介&#34;&gt;自己紹介
&lt;/h2&gt;&lt;p&gt;普段は&lt;strong&gt;ユーザベース&lt;/strong&gt;という、「経済情報で、世界を変える」というミッションを持った会社にいます。BtoB SaaS の事業で、企業の公開情報を分かりやすく整理してお客様にお届けする——そういうサービスの仕事で、&lt;strong&gt;データサイエンティスト&lt;/strong&gt;をしております。普段は自然言語処理で機械学習を使ったようなことをやっています。&lt;/p&gt;
&lt;p&gt;それとは全く別に、&lt;strong&gt;Code for Japan のエンジニア&lt;/strong&gt;として、本業が終わった後や土日に&lt;strong&gt;シビックテック&lt;/strong&gt;と呼ばれる活動をしています。&lt;/p&gt;
&lt;p&gt;ユーザベースでは&lt;strong&gt;フェローエンジニア&lt;/strong&gt;という立場でもあります。CTO のように経営面へのコミットを強く求められる立場以外で、エンジニアとしてキャリアパスを作るためのものです。&lt;strong&gt;日々ひたすらコードを書いていますし、Code for Japan でもひたすらコードを書いています。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;シビックテックとは&#34;&gt;シビックテックとは
&lt;/h2&gt;&lt;p&gt;ざっくり言うと、&lt;strong&gt;ICT を使って地域の課題を解決する、世界的なムーブメント&lt;/strong&gt;のことです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code for America&lt;/strong&gt; が一番の本場のようなところですが、最近は台湾でオードリー・タン デジタル担当大臣が大活躍されていて、&lt;strong&gt;g0v（ガブゼロ）&lt;/strong&gt; という台湾のシビックテックコミュニティもかなり有名になってきました。&lt;/p&gt;
&lt;p&gt;台湾の g0v の例のように、&lt;strong&gt;マスクの在庫を可視化してオープンデータとして提供することで、在庫量をチェックできるアプリケーションが市民の手によって生まれる&lt;/strong&gt;——そういった活動がシビックテックなのかなと思っています。&lt;/p&gt;
&lt;p&gt;日本でも &lt;strong&gt;Code for Japan&lt;/strong&gt; という団体があり、&lt;strong&gt;Code for All&lt;/strong&gt; という世界的なシビックテックのネットワークに加盟して、他国の団体と交流したり、国内の&lt;strong&gt;ブリゲード&lt;/strong&gt;と呼ばれる特定地域に根ざした団体を支援したりしています。&lt;/p&gt;
&lt;p&gt;ビジョンとして「&lt;strong&gt;共に考え、共につくる&lt;/strong&gt;」を掲げ、日本の地域課題を解決することを目指すコミュニティです。&lt;/p&gt;
&lt;p&gt;なお私自身は一般社団法人の構成員というわけではなく、たまにプロジェクトに業務委託のエンジニアとして入る、といった関係です。ちゃんとした所属として名乗ると誤解を招くかもしれないのですが、&lt;strong&gt;事務局長の了解はもらっていて&lt;/strong&gt;、Code for Japan でエンジニアをやっているということで。&lt;/p&gt;
&lt;p&gt;中の人はエンジニアが多いとはいえ&lt;strong&gt;それでも20%くらい&lt;/strong&gt;で、それ以外は公務員や普通の会社員でエンジニアリングではない仕事をされている方、学生の方も参加されています。&lt;/p&gt;
&lt;p&gt;Slack でコミュニケーションを取っているのですが、**このコロナサイトの影響で、それまで500人くらいだったコミュニティが一気に4500人くらいまで成長しました。**ただ、一気に増えた後もずっと継続的に活動している人はそんなに多くはないので、&lt;strong&gt;実質の活動人数が増えた感じはあまりしていない&lt;/strong&gt;のですが。&lt;/p&gt;
&lt;h2 id=&#34;私とシビックテック--7年&#34;&gt;私とシビックテック ― 7年
&lt;/h2&gt;&lt;p&gt;シビックテックに参加して7年くらいになります。&lt;/p&gt;
&lt;p&gt;**一番最初にシビックテックを知ったのは、2011年の sinsai.info でした。**当時、私は都内の某大学で博士研究員をしていて、データとはあまり関係ない研究をしていました。東日本大震災も大学の研究室にいるときに被災したのですが、私自身も困った経験をする中で、「&lt;strong&gt;IT を使ってボランタリーな活動で世に貢献していく、そういう道があるんだ&lt;/strong&gt;」とすごく感動したのを覚えています。&lt;/p&gt;
&lt;p&gt;そこからすぐ参加したわけではなく、少し時間を置いて、2012年ごろに富士通に就職してデータサイエンティストとして駆け出しました。そして2013年末、「&lt;strong&gt;Where Does My Money Go?&lt;/strong&gt;」——&lt;strong&gt;私の税金は何に使われているのか&lt;/strong&gt;を可視化するサービス——のイベントに参加したのが最初でした。&lt;/p&gt;
&lt;p&gt;これもオープンソースで、&lt;strong&gt;データを自治体ごとに差し替えるとその自治体版ができる&lt;/strong&gt;という仕組みになっていて、その対応自治体を増やすイベントでした。&lt;/p&gt;
&lt;p&gt;当時の私は思いっきり駆け出しで、&lt;strong&gt;データの加工もろくにできない&lt;/strong&gt;ような状態でした。自治体ごとに費目が表記揺れしていて、そのままソフトウェアにかけられない——&lt;strong&gt;そういう体験を通じて、データの標準化や、正しくデータを出すことの重要さを実感できた&lt;/strong&gt;かなと思っています。&lt;/p&gt;
&lt;p&gt;そういう体験もあって「シビックテックは重要だし面白いな」と参加し続けているうちに、&lt;strong&gt;本業では得られないフロントエンド系の技術や、政府系のオープンデータ・データ標準化に詳しくなり、それがまた本業にも生きてくる&lt;/strong&gt;——そういうサイクルを体験できた7年でした。&lt;/p&gt;
&lt;h2 id=&#34;東京都のコロナ対策サイト&#34;&gt;東京都のコロナ対策サイト
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;一番最初のリリースは3月3日の深夜&lt;/strong&gt;——正確には日をまたぐくらいでした。その段階では&lt;strong&gt;4枚くらいのパネルしかなかった&lt;/strong&gt;と思います。本当に基本的な数字だけを表示している、そんなサイトでした。&lt;/p&gt;
&lt;p&gt;やっていることは、&lt;strong&gt;東京都が公式で発表したデータを可視化した&lt;/strong&gt;ものです。可視化として凝ったものではなく、ただの棒グラフだったり、移動平均線が付いていたり、テーブルの形で検査陽性者の状況が出ていたり——&lt;strong&gt;本当にシンプルなものが並んでいるだけ&lt;/strong&gt;です。&lt;/p&gt;
&lt;h3 id=&#34;特徴-ソースコードが-oss-として公開されていた&#34;&gt;特徴① ソースコードが OSS として公開されていた
&lt;/h3&gt;&lt;p&gt;この活動が面白いと言っていただけた背景の一つに、&lt;strong&gt;サイトのソースコード自体が MIT ライセンスの OSS として公開されていた&lt;/strong&gt;ことがあるかなと思います。&lt;/p&gt;
&lt;p&gt;裏側は JavaScript でできているのですが、そのソースコードが全部 &lt;strong&gt;GitHub&lt;/strong&gt; で公開されている。誰でもアクセスでき、&lt;strong&gt;コピーして自分のパソコンで立ち上げることも、別のところにホスティングすることもできる&lt;/strong&gt;——そういう配布の仕方をしています。&lt;/p&gt;
&lt;p&gt;技術としては &lt;strong&gt;Vue.js&lt;/strong&gt; と、それを助けるフレームワークである &lt;strong&gt;Nuxt.js&lt;/strong&gt; を使っています。このあたりの選定も、&lt;strong&gt;自治体のサイトとしてはだいぶ尖っている&lt;/strong&gt;と言っていただいたところです。&lt;/p&gt;
&lt;h3 id=&#34;特徴-データもオープンデータで公開していた&#34;&gt;特徴② データもオープンデータで公開していた
&lt;/h3&gt;&lt;p&gt;棒グラフの下あたりに「&lt;strong&gt;オープンデータで入手&lt;/strong&gt;」というリンクがあり、クリックすると &lt;strong&gt;JSON の形でデータがダウンロードできる&lt;/strong&gt;ようになっています。&lt;/p&gt;
&lt;h3 id=&#34;受賞&#34;&gt;受賞
&lt;/h3&gt;&lt;p&gt;いろいろと賞もいただきました。もちろん受賞している主体は東京都です。&lt;strong&gt;グッドデザイン賞では大賞の候補まで残り、惜しくも大賞は逃した&lt;/strong&gt;のですが、金賞をいただいております。&lt;/p&gt;
&lt;p&gt;その&lt;strong&gt;受賞理由のコメントが非常に象徴的&lt;/strong&gt;だったのでご紹介すると——&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;正確な情報を迅速に届けるため、様々な指標の情報やデータをグラフや表で分かりやすく掲載し更新していること。グラフや表などに活用しているデータをオープンデータとして公開していること。ソースコードも公開して、他自治体においても活用が可能な形にしていること。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;今まで前例はなかったけれど、やってみると非常に合理的だと思えること&lt;/strong&gt;を達成できたかなと。そこをグッドデザイン賞でも認めていただいたのは、それなりに良いことが達成できたのかなと思っています。&lt;/p&gt;
&lt;p&gt;あと個人的な話ですが、開発者として嬉しかったのが &lt;strong&gt;GitHub Trending&lt;/strong&gt; です。&lt;strong&gt;世界で総合1位&lt;/strong&gt;——1日だけだったと思いますが——を取れたのは、個人的にも嬉しかったです。&lt;/p&gt;
&lt;h2 id=&#34;62サイトへの横展開&#34;&gt;62サイトへの横展開
&lt;/h2&gt;&lt;p&gt;受賞理由にもあった「&lt;strong&gt;他自治体への展開&lt;/strong&gt;」ですが、実績としては &lt;strong&gt;62サイト&lt;/strong&gt;に展開されました。&lt;strong&gt;47都道府県すべてで一度は作られた状態&lt;/strong&gt;になりましたし、サンフランシスコや台湾など&lt;strong&gt;海外でも使われています。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;そのうちいくつかは実際に&lt;strong&gt;自治体の公式サイトとして採用&lt;/strong&gt;していただき、運用が続いていると聞いています。&lt;/p&gt;
&lt;p&gt;それ以外は個人ベースやボランティア団体がやっているところもあって、&lt;strong&gt;データの更新に課題があって廃止されてしまったサイトもある&lt;/strong&gt;と聞いています。&lt;strong&gt;今までのシビックテックではそこまで到達できなかったので、あまり気にならなかった課題&lt;/strong&gt;なのですが、今回そういう課題も顕在化してきたので、次はそういうことがないように頑張りたいね、という反省が生まれたりしました。&lt;/p&gt;
&lt;p&gt;左が神奈川県版、右が北海道版です。&lt;strong&gt;ほぼそのまま採用いただいている&lt;/strong&gt;のですが、自治体ごとに工夫も入っていて、たとえば北海道版には&lt;strong&gt;日付のレンジを変えるつまみ&lt;/strong&gt;が入っています。全部オープンソースなので、&lt;strong&gt;自治体の都合や表示したいデータに合わせて改造が入る&lt;/strong&gt;わけです。&lt;/p&gt;
&lt;h3 id=&#34;なぜ横展開に意味があるのか&#34;&gt;なぜ横展開に意味があるのか
&lt;/h3&gt;&lt;p&gt;このコロナサイトが達成したことは「&lt;strong&gt;情報の伝達&lt;/strong&gt;」です。そして&lt;strong&gt;情報の伝達という課題は全国共通&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;それ以外の地域課題も、だいたい全国共通のものが多い。今までのシビックテックでも、「保育園がどこ空いているか分からない」とか、「&lt;strong&gt;ゴミナシ&lt;/strong&gt;」というアプリのように「ゴミはいつ出せるのか」「このゴミは何ゴミなのか」といった課題を、その地域用のアプリを作って解決する、というものがありました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;全国共通の課題が多いので、アプリの横展開は開発するときにだいたい考えることになります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一番の理想&lt;/strong&gt;は——&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;オープンデータが全国の自治体で完全に標準化されてどこにでもある&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ある地域課題を解くオープンソースのソフトウェアを&lt;strong&gt;一つ作る&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;あとは&lt;strong&gt;オープンデータを自治体ごとに入れ替えるだけで、その自治体用のアプリが完成する&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これがシビックテックの一つの理想かなと思っています。&lt;/p&gt;
&lt;p&gt;**ただ、実際にやろうとするとデータ側に課題が多い。**今回のコロナサイトでも、県が出しているデータが PDF だったという話も聞きました。データを出してはくれているけれど——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;フィールド名が違う&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;集計しているものが違う&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;形式が JSON だったり CSV だったり&lt;/strong&gt;バラバラ&lt;/li&gt;
&lt;li&gt;そもそも&lt;strong&gt;データとして公開していない&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;電子的に保存しておらず紙でしかない&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そういうデータも結構たくさんあるわけです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;自治体側もそういうオペレーションを組むメリットが今まで取れなかったので、されてこなかった&lt;/strong&gt;ことかなと思います。しかし今回、**東京都は全面的にバックアップして、「サイトを表示するためにどういうデータが必要か」というところから都内でオペレーションを組んでくださった。**そこまでできるという実例ができたので、こういう活動もしやすくなっているかなと思います。&lt;/p&gt;
&lt;h2 id=&#34;技術選定の話&#34;&gt;技術選定の話
&lt;/h2&gt;&lt;p&gt;ここから開発の話に入ります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;非常にざっくりした仕様からのスタート&lt;/strong&gt;でした。最初は本当に何もなく、どんなサイトになるかも分かりませんでした。決まっていたのは——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;静的なサイト&lt;/strong&gt;である&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;データごとに拡張する&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1日1回データが更新される&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;表示したいデータは後で増える&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;いくつかページがある&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この断片的な情報から逆に設定していきました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;静的サイト → &lt;strong&gt;スタティックサイトジェネレーターでいいよね&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;1日1回更新 → &lt;strong&gt;GitHub Actions を組むか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;データが増える → レイアウトは後でコンポーネントを追加しやすいよう&lt;strong&gt;細かいコンポーネントで作る&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ページが複数 → &lt;strong&gt;ルーティングができるフレームワークがいい&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;……ということで、&lt;strong&gt;Nuxt.js でいきましょう&lt;/strong&gt;と決まりました。&lt;/p&gt;
&lt;h3 id=&#34;nuxtjs-とは&#34;&gt;Nuxt.js とは
&lt;/h3&gt;&lt;p&gt;そもそもは &lt;strong&gt;Vue.js&lt;/strong&gt; というフレームワークがあって、&lt;strong&gt;Vue 製のアプリケーションをサーバーサイドレンダリングするフレームワーク&lt;/strong&gt;、というのが定義です。&lt;/p&gt;
&lt;p&gt;Vue.js は JavaScript で Web UI を開発するフレームワークの一種で、先ほど大野さんの話に出てきた React とちょうど同じ立ち位置です。React で開発するか、Vue で開発するか、Angular か、と。&lt;/p&gt;
&lt;p&gt;Vue も React と同様に&lt;strong&gt;コンポーネントごとに作って組み合わせていく&lt;/strong&gt;。コンポーネントは小さい単位で自己完結的に作られ、&lt;strong&gt;再利用可能&lt;/strong&gt;な形にします。今回で言うと、&lt;strong&gt;グラフを表示しているカード1枚1枚&lt;/strong&gt;、そしてその中の細かい部品も全部 Vue のコンポーネントで作りました。&lt;/p&gt;
&lt;p&gt;サーバーサイドレンダリングとは、多くのアプリケーションのように JavaScript を配信してブラウザでレンダリングするのではなく、&lt;strong&gt;あらかじめサーバーでレンダリングした HTML だけを配信する&lt;/strong&gt;ものです。&lt;strong&gt;ただ今回その機能は使っておらず、スタティックサイトジェネレーターの部分だけを使っています。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;nuxt-を選んだ本当の理由&#34;&gt;Nuxt を選んだ本当の理由
&lt;/h3&gt;&lt;p&gt;もう一つの大きな特徴として、&lt;strong&gt;Vue アプリケーション開発のベストプラクティスを「制限」としてフレームワークに組み込んでいる&lt;/strong&gt;ことがあります。&lt;/p&gt;
&lt;p&gt;Vue 自体は非常に薄く、規定の少ないフレームワークです。&lt;strong&gt;ファイルをどこに置くか、どういう名前にするか、どういう役割を持たせるか&lt;/strong&gt;は開発チームが決めることになる。ノウハウが共有されることもあまりないので、&lt;strong&gt;バラバラのまま作ってしまったり、開発チームが変わるとどこに何があるか分からなくなったり&lt;/strong&gt;する。&lt;/p&gt;
&lt;p&gt;Nuxt.js の場合は、**開発ニーズの8割以上を満たす設計ができるベストプラクティスを、あらかじめルールとして設けてしまっている。**それ以外をやろうとすると大変なのですが、&lt;strong&gt;そこを守ってさえいれば簡単に開発ができる。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;たとえば HTML のページを1つ作りたければ、&lt;strong&gt;&lt;code&gt;pages&lt;/code&gt; ディレクトリの下に Vue ファイルを1つ置く。そのファイル名が URL のパスになる。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;制限が強いのでできないこともあるのですが、&lt;strong&gt;今回はデータを表示するだけのサイトなので、Nuxt.js を使っても後で詰まることはないだろう&lt;/strong&gt;と考えて選定しました。&lt;/p&gt;
&lt;p&gt;さらに、&lt;strong&gt;ビルド関係の設定も内包している&lt;/strong&gt;という特徴があります。サーバーサイドレンダリング、スタティックサイトジェネレーター、SPA——**人力でやると非常に大変な切り替えが、1つの設定値やコマンドだけでできる。**ディレクトリ構造もはっきりしているので、**新しく来たコントリビューターが迷うことなく開発を始められる。**本質的な開発に集中するためにメリットのあるフレームワークです。&lt;/p&gt;
&lt;p&gt;……と、こう話すと合理的な選択に見えると思うのですが、もちろん「&lt;strong&gt;React でもいいじゃないか&lt;/strong&gt;」という話も当然出てきます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;なぜ Nuxt だったのか。実は文脈がありました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Code for Japan の活動で、&lt;strong&gt;避難所などの情報を地図にプロットして、それを紙に印刷して被災地に配る&lt;/strong&gt;——そういうことを支援するアプリを作っていた時期がありました。Web マップはネット回線や電源がないと使えないので、&lt;strong&gt;本当の被災地では役に立たない&lt;/strong&gt;んですよね。&lt;/p&gt;
&lt;p&gt;作ったのは&lt;strong&gt;2018年7月、西日本豪雨の水害&lt;/strong&gt;のときで、そのときは &lt;strong&gt;jQuery と Leaflet.js&lt;/strong&gt; で開発していました。「2018年にそのチョイスはなかなかない」と言われるかもしれません。ただ&lt;strong&gt;シビックテックのコミュニティは年齢層の高いエンジニアが多く&lt;/strong&gt;、集まった人たちも「&lt;strong&gt;jQuery だったら書ける&lt;/strong&gt;」という方が多かった。若い方ももちろんいましたが。それで機能したので「jQuery で良かったね」と言いながら作っていました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただ、jQuery で作ると一つのファイルに巨大なコンポーネントを書かなければならなくなる。&lt;strong&gt;4〜5名で開発していても&lt;/strong&gt;コンフリクトが多発&lt;/strong&gt;したので、「もっと汎用的な作りにするときに何か導入しよう」ということで &lt;strong&gt;Nuxt.js&lt;/strong&gt; をそのときに選びました。&lt;strong&gt;そのときになぜ Nuxt だったのかの経緯は、私が選んだわけではないので分からない&lt;/strong&gt;のですが、&lt;strong&gt;そのチョイスがあったのでコミュニティの知識として Nuxt を使える人が結構多く、いけるんじゃないか&lt;/strong&gt;ということで選定した、という背景があります。&lt;/p&gt;
&lt;h3 id=&#34;ホスティング--netlify&#34;&gt;ホスティング ― Netlify
&lt;/h3&gt;&lt;p&gt;サイトは &lt;strong&gt;Netlify&lt;/strong&gt; でホストしています。&lt;/p&gt;
&lt;p&gt;一番最初は &lt;strong&gt;GitHub Pages&lt;/strong&gt; を検討していて、GitHub Actions で CI を組んでデプロイしようとしていました。&lt;strong&gt;ただ東京都の公式サイトということで証明書に制限があり、「この証明書でないといけない」という指定のものを GitHub Pages では使えなかった&lt;/strong&gt;——そういう理由で、&lt;strong&gt;Netlify ならできるのでやってみようか&lt;/strong&gt;となりました。当時から普通にホスト先として有名だったので、チョイス自体は普通だったと思います。&lt;/p&gt;
&lt;p&gt;リリースして数週間した&lt;strong&gt;3月22日、Netlify がコロナウイルス関係のサイトへのサポートを発表&lt;/strong&gt;して、&lt;strong&gt;有料プランを無償で提供する&lt;/strong&gt;ことになりました。今でも東京都のサイトの派生サイトはそちらでホストされているものが多いんじゃないかと思います。&lt;/p&gt;
&lt;h3 id=&#34;ui-コンポーネント--vuetify&#34;&gt;UI コンポーネント ― Vuetify
&lt;/h3&gt;&lt;p&gt;もう一つ、&lt;strong&gt;Vuetify&lt;/strong&gt; を使っています。Vue で使う、&lt;strong&gt;マテリアルデザインのスタイルをあらかじめ適用したコンポーネント群&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;対策サイトの部品は今でも結構これで作られていて、サイト全体は &lt;code&gt;v-app&lt;/code&gt;、メインコンテンツは &lt;code&gt;v-container&lt;/code&gt;、タブも &lt;code&gt;v-tabs&lt;/code&gt;、カード1枚1枚も &lt;code&gt;v-card&lt;/code&gt; でできています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;これは後で話しますが、Vuetify は当時アクセシビリティ的にあまり良くなかったらしく&lt;/strong&gt;、「Vuetify を使いましょう」と言ったのが私だったので、&lt;strong&gt;「Vuetify をなんで選んじゃったんですか」と後で怒られた&lt;/strong&gt;というのが発生して、ちょっと思い出深かったりします。今 Vuetify のサイトを見るとアクセシビリティ対応のチュートリアルがあったりするので、その辺は改善されているのかなと思います。&lt;/p&gt;
&lt;h2 id=&#34;ようやく可視化の話&#34;&gt;ようやく可視化の話
&lt;/h2&gt;&lt;p&gt;**一瞬で終わってしまうのですが、可視化はほとんど棒グラフです。**データの粒度は1日1本。&lt;/p&gt;
&lt;p&gt;その1日1本のデータを&lt;strong&gt;都庁内で取りまとめるオペレーション&lt;/strong&gt;が組まれていて、SharePoint に入力されているものを &lt;strong&gt;GitHub Actions などの CI で API 経由で取ってきて、&lt;code&gt;data.json&lt;/code&gt; に整形して、サイト側で読み込む&lt;/strong&gt;——そういう構造になっていました。&lt;/p&gt;
&lt;p&gt;取りまとめる際に&lt;strong&gt;複数部局に分かれているのでデータの反映タイミングがバラバラ&lt;/strong&gt;だったりして、初期はゴタゴタしたのですが、だんだんスムーズになっていった印象があります。&lt;/p&gt;
&lt;h3 id=&#34;なぜ-chartjs-を選んだか&#34;&gt;なぜ Chart.js を選んだか
&lt;/h3&gt;&lt;p&gt;チャートの部分は &lt;strong&gt;Chart.js&lt;/strong&gt; を使いました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;私自身は D3.js が好きなので、一瞬 D3.js でいこうかと思った&lt;/strong&gt;のですが——&lt;strong&gt;D3.js はご存知の通り学習コストが非常に高い。「生身のチェーンソーをそのまま振り回すようなものだ」と言われるくらい扱いが難しく、間違ったグラフを作ってしまいやすい面もある。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;どれくらいのスキルの人たちが今後開発に参加してくれるか分からない状況では、間違ったグラフが作られにくい Chart.js を使いましょう&lt;/strong&gt;と、そこで理性を取り戻しました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただ、データの事情に合わせて特殊な対応が必要になったこともありました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;途中で算出基準が変わった&lt;/strong&gt;データがあったんですね。たとえば入院患者数は5月11日から基準が変わったのですが、そのとき「こういうふうに改変してくれ」という依頼が来る。&lt;strong&gt;Chart.js だと、この境界を示す枠線を出すだけで大変&lt;/strong&gt;だったりします。&lt;strong&gt;D3.js なら1〜2行でできるような処理&lt;/strong&gt;なのに。&lt;/p&gt;
&lt;p&gt;これは、今は学生インターンとして Code for Japan で大活躍している開発者が「&lt;strong&gt;線グラフとしてここに書けばいいんじゃないか&lt;/strong&gt;」と発想して、実際に&lt;strong&gt;線グラフとして矩形を表現&lt;/strong&gt;して回避しているらしいです。&lt;/p&gt;
&lt;h3 id=&#34;コンポーネント設計--スロット&#34;&gt;コンポーネント設計 ― スロット
&lt;/h3&gt;&lt;p&gt;カード1枚1枚を &lt;strong&gt;DataView&lt;/strong&gt; というコンポーネント（名前は適当だったのですが）にして、&lt;strong&gt;中身を後で入れ替えられるように&lt;/strong&gt;し、それを並べる、という基本構造を最初に作りました。&lt;/p&gt;
&lt;p&gt;Vue には &lt;strong&gt;slot&lt;/strong&gt; というものがあります。HTML は入れ子にできますが、&lt;strong&gt;その入れ子の中身を slot の場所にレンダリングする&lt;/strong&gt;という対応関係になる。それを利用して、&lt;strong&gt;中身だけ差し替えて、外側は同じ&lt;/strong&gt;という状況を作りたかったわけです。&lt;/p&gt;
&lt;p&gt;**実際に作ってみると、最初に想定していなかった場所に、想定していなかった注意書きなどを出したい、ということが結構ありました。**今だと6か所くらいに slot が刺さっている状態になっているのですが、&lt;strong&gt;あらかじめそういう構造にしておいて良かった&lt;/strong&gt;なと思っています。&lt;/p&gt;
&lt;p&gt;slot は1個だけだと困るので複数作ることができて、たとえば &lt;code&gt;description&lt;/code&gt; という名前で差し込むとそこに入る。&lt;strong&gt;拡張性と、見た目の統一の両方ができるように工夫して実装していました。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;実装中の祈りのような心の動き&#34;&gt;実装中の「祈りのような心の動き」
&lt;/h2&gt;&lt;p&gt;実装している間に&lt;strong&gt;祈りのような心の動き&lt;/strong&gt;が発生したのが印象的だったので、共有させていただきます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;今から考えると呑気すぎる話&lt;/strong&gt;なのですが、当時はどれくらい続くか、どれくらいの規模になるか全く分かりませんでした。&lt;strong&gt;リリースした日も感染者4人&lt;/strong&gt;だったんですよ。&lt;strong&gt;「長期化しないといいな、願わくば数ヶ月で収束してくれるといいな」&lt;/strong&gt;——それくらいの感覚でいました。&lt;/p&gt;
&lt;p&gt;ただ、エンジニアリング的にものを作るときは「大量のデータに対応できるように」と当然考えるので、そういう実装をしなければならない。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;感染者数の表示に3桁区切りのカンマを入れる&lt;/strong&gt;という対応をしてくれた方がいて、それをマージするときに「&lt;strong&gt;でも、これ要らないといいですよね&lt;/strong&gt;」と言いながらマージした&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;棒グラフの横幅も、最初は固定幅でリリース&lt;/strong&gt;しました。今はスクロールバーで3月まで遡れますが、当時は&lt;strong&gt;どれくらい続くか分からないし、実装が必要なだけ長くなりそうだ&lt;/strong&gt;ということでスクロールなしでリリースした&lt;/li&gt;
&lt;li&gt;そして&lt;strong&gt;最近まで残っていたのですが、データの部分に「2020年」という年号が入っていなかったので、サイトが実は年を越せない&lt;/strong&gt;仕様になっていました。&lt;strong&gt;もうあと数日で1月1日を迎えますが、プログラムは「2020年1月1日のデータ」と誤読する&lt;/strong&gt;状態のまま、しばらく放置されていたという話があったりします&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;リリース直後--リポジトリが特定される&#34;&gt;リリース直後 ― リポジトリが特定される
&lt;/h2&gt;&lt;p&gt;3月3日の深夜にリリースされたのですが、&lt;strong&gt;その日のうちに Twitter で GitHub のリポジトリが特定されて拡散されました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;未だになぜ拡散したのか謎&lt;/strong&gt;なのですが、サイトのソースの変数名あたりからかな、と憶測を立てています。とにかく「東京都のサイトのソースコードがこんなところにある」と拡散された。リポジトリの中で立てていた issue に &lt;strong&gt;Figma の URL&lt;/strong&gt; もあったので、&lt;strong&gt;デザインも公開している&lt;/strong&gt;ということで、それも結構拡散されました。&lt;/p&gt;
&lt;p&gt;それ自体は喜ばしいのですが、&lt;strong&gt;Figma にアクセスが集中しすぎると人数制限で入れなくなってしまう&lt;/strong&gt;ので、&lt;strong&gt;当時コアで開発していたメンバーも入れなくなってしまった&lt;/strong&gt;ということがありました。&lt;/p&gt;
&lt;p&gt;そして「こういうことがあるなら自分の技術を活かしたい」と思っていただいて、既に立っていた issue にコミットしてくださる方も大勢いらっしゃいました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただ当時は受け入れ体制が全くできておらず&lt;/strong&gt;、レビューの手順も決まっていない、誰がやるのかも決まっていない。&lt;strong&gt;取り込みが全然できず、皆さんの貢献したい気持ちにブレーキをかけてしまった&lt;/strong&gt;——これが当時、結構ストレスになっていたかなと思います。&lt;/p&gt;
&lt;p&gt;さらに、&lt;strong&gt;取り込むのに東京都の OK が必要なケースもある&lt;/strong&gt;ので、&lt;strong&gt;善意で立てられた issue でも取り込めるかどうか分からない&lt;/strong&gt;ケースがある。&lt;strong&gt;きわどいものに対して、そういう事情を分かっていない方がコミットするような動きも見えた&lt;/strong&gt;ので、結構ヒヤヒヤしていました。&lt;/p&gt;
&lt;h2 id=&#34;コミュニティの受け入れ体制を作る&#34;&gt;コミュニティの受け入れ体制を作る
&lt;/h2&gt;&lt;p&gt;そういうときに、&lt;strong&gt;開発コミュニティとして今まで蓄積してきた知見&lt;/strong&gt;も含めていろいろ対策を打ち、&lt;strong&gt;1週間後くらいにはレビューして取り込んでいける体制ができました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;具体的には大きく3つです。&lt;/p&gt;
&lt;h3 id=&#34;-行動規範とコントリビューションガイドの整備&#34;&gt;① 行動規範とコントリビューションガイドの整備
&lt;/h3&gt;&lt;p&gt;**これは実はリリースの瞬間には既にやっていました。**こういう行動規範は Code for Japan のイベントで普段から設けているもので、&lt;strong&gt;元々あったものを適用&lt;/strong&gt;した形です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;issue のテンプレート&lt;/strong&gt;も置きました。&lt;code&gt;.github&lt;/code&gt; の下にテンプレートの Markdown を置いておくと、誰かが issue を投稿しようとしたときに「&lt;strong&gt;こういう項目を書いてください&lt;/strong&gt;」という雛形が表示される。箇条書きの部分を埋めるだけで issue が投稿できるし、&lt;strong&gt;読む側もフォーマットが統一されているので何をやりたいのかが分かりやすい。&lt;strong&gt;こういうもので&lt;/strong&gt;コミュニケーションコストを下げていました。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;-lint-を-ci-にかける&#34;&gt;② Lint を CI にかける
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;開発環境を特に指定していなかった&lt;/strong&gt;ので、皆さんいろいろな環境で開発されていました。そうすると、&lt;strong&gt;行頭のスペースをいくつにするかといったコード規約を自動で整える処理がかからない&lt;/strong&gt;開発環境もある。&lt;/p&gt;
&lt;p&gt;そこは非常にしつこく、&lt;strong&gt;何回も CI にかけて&lt;/strong&gt;、そういう差分のせいで&lt;strong&gt;本来コミットしたかった開発が漏れてしまわないように&lt;/strong&gt;注意していました。&lt;/p&gt;
&lt;h3 id=&#34;-netlify-のデプロイプレビュー&#34;&gt;③ Netlify のデプロイプレビュー
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Netlify を使ってデプロイしていると、プルリクエストが来たときに「取り込んだ後のプレビュー環境」を自動で生成してくれる機能&lt;/strong&gt;があります。独自の URL が発行されて、そこで**取り込んだ後の挙動をチェックできる。**これは生産性を大きく向上させました。&lt;/p&gt;
&lt;h2 id=&#34;その道のプロが集まってきた&#34;&gt;その道のプロが集まってきた
&lt;/h2&gt;&lt;p&gt;参加者が増えていくと、&lt;strong&gt;その道のプロ&lt;/strong&gt;が集まってきてくださいました。2つだけ紹介します。&lt;/p&gt;
&lt;h3 id=&#34;アクセシビリティ&#34;&gt;アクセシビリティ
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;アクセシビリティのプロの方々が来て、このサイトのアクセシビリティを向上させてくれる&lt;/strong&gt;ということがありました。&lt;/p&gt;
&lt;p&gt;3月3日のリリース後、&lt;strong&gt;3月6日にオンラインでアクセシビリティのもくもく会&lt;/strong&gt;が開催され、&lt;strong&gt;このサイトのアクセシビリティの問題点を探し出そう&lt;/strong&gt;という催しが行われました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「公開処刑されるんじゃないか」と戦々恐々としていた&lt;/strong&gt;のですが、実際はすごくポジティブなマインドの方々が集まっていて、&lt;strong&gt;その後も継続的に改善に取り組んでいただきました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;……ただ「なんで Vuetify を採用したんだ」という怒られはこのときに発生した&lt;/strong&gt;ので、私にとってはちょっとトラウマ、というほどではないですが。&lt;/p&gt;
&lt;p&gt;このあたりの話は Code for Japan Summit で詳しくしていただいているので、ご興味ある方はそちらの講演を見ていただくと面白いと思います。&lt;/p&gt;
&lt;h3 id=&#34;多言語対応&#34;&gt;多言語対応
&lt;/h3&gt;&lt;p&gt;これもその道のプロが集まってくださって、&lt;strong&gt;最終的には5か国語に対応&lt;/strong&gt;することができました。&lt;/p&gt;
&lt;p&gt;Nuxt の中で &lt;code&gt;t&lt;/code&gt; で始まる文字列を書いておくと、対応を書いた JSON ファイルで自動的に置き換えられ、&lt;strong&gt;言語設定を変えるだけで、ソースコードに触れずに多言語化できる&lt;/strong&gt;——そういう状況を&lt;strong&gt;初期の段階で整えることができました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;あとは翻訳の文言を、いろいろな方がやってくださいました。&lt;strong&gt;これはオードリー・タンさんにも手を入れていただいたことがあって、結構話題になりました。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;これを普通にしていきたい&#34;&gt;これを「普通」にしていきたい
&lt;/h2&gt;&lt;p&gt;こんな感じで開発が進んでいきました。特に&lt;strong&gt;最初の1ヶ月&lt;/strong&gt;は私もかなりコミットしていたのですが、その時点で既に**各分野の詳しい方が入ってきてくださっていて、「私なんかが出る幕じゃないな」**と。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;学生の活躍もかなり素晴らしく&lt;/strong&gt;、先ほどの国際化（i18n）も&lt;strong&gt;音頭を取ってくれたのは学生&lt;/strong&gt;だったりしました。&lt;/p&gt;
&lt;p&gt;私が思ったのは、&lt;strong&gt;今回の活動を、今後は「普通」にしていきたい&lt;/strong&gt;ということです。&lt;/p&gt;
&lt;p&gt;今回の東京都の対応は結構素晴らしかったと思いますが、&lt;strong&gt;実際にやってみると、オープンソースでオープンデータでこういうことをやるのは、すごく合理的&lt;/strong&gt;なんですよね。&lt;strong&gt;こういう合理的な事例があったということ自体をベースにして、次の活動ではそれをどんどん超えていくようなことをやっていきたい&lt;/strong&gt;と思います。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;エンジニア視点であのサイトの開発をまとめると、&lt;strong&gt;シビックテックのベストプラクティスと呼べるものが浮かび上がってきた&lt;/strong&gt;かなと思いました。&lt;/p&gt;
&lt;p&gt;個人としては、&lt;strong&gt;今後の事例の足掛かりとして、次のプロジェクトではもっとより良いものを目指していきたい&lt;/strong&gt;と思っています。&lt;/p&gt;
&lt;p&gt;長くなりましたが、以上で終わります。ありがとうございました。&lt;/p&gt;</description>
        </item>
        
    </channel>
</rss>
