この記事は CAMPHOR- Advent Calendar 2020 19日目の記事です.18日目の記事はお休みで,17日目の記事は @sanpo_shiho の「CAMPHOR- VPSのコンテナロギングを支える技術」でした.
CAMPHOR- Advent Calendar は2014年に始まった取り組みで,今年で7年目を迎えました.この記事を含め,今日までで7年間で170記事が投稿されています.特にキリがいいというわけではないのですが,CAMPHOR- Advent Calendar を最初に企画した担当として,一度これまでの振り返りをしてみたいと思います.また,自然言語処理等の技術を使って,これまでの記事をより探しやすくする試みについても紹介します.
背景
CAMPHOR- Advent Calendar は 2014 年に開始した企画です.その経緯は最初の記事にも簡単に紹介されています.
2014年の CAMPHOR- は発信の年として, ハッカソンや勉強会, 講座などのイベントを開催したり, Tech Blog で技術情報の発信を行ってきました. CAMPHOR- アドベントカレンダー 2014 はその発信の年の総まとめとなる企画です.
CAMPHOR- アドベントカレンダー 2014 を始めます! – CAMPHOR- Blog
もう少し当時の背景を振り返ると,CAMPHOR- では勉強会のようないわゆる「インプット」を行える環境が比較的よく整っていました.Web サイトの記録によると,2014年には勉強会を含む21回のイベントが開催されていました.一方でいわゆる「アウトプット」を行うこともエンジニアの学びの形として重要とされていますが,こちらは一般的にインプットに比べてハードルが高い傾向があります.(インプット・アウトプットの重要性についての詳細はこの記事では議論しません.) アドベントカレンダーは CAMPHOR- のメンバーのアウトプットの機会を増やす促進剤的な役割も期待されていました.
また,CAMPHOR- というコミュニティ自体の露出を増やすことも,新たなメンバーを増やすことにつながったり,企業による協賛につながりやすくなるなど,コミュニティの継続に役立つとも考えられていました.
2014年ごろは,日本のエンジニアによるアドベントカレンダーが盛り上がってきていた時期でもあります.Adventer や Qiita Advent Calendar で過去のカレンダーや参加者数を見ることができますが,2014年は2013年から大きく成長し,現在の1/3〜1/4程度のカレンダー数や参加者数になった年でした.
運営
CAMPHOR- Advent Calendar は Adventer や Qiita Advent Calendar などの外部のサービスを利用せずに運営されています.それぞれのメンバーがカレンダーに直接参加登録してもらうのではなく,毎年「世話係」のような担当者がスケジュール等を調整して,独自のサイトで公開する仕組みをとっています.毎年の流れは簡単にまとめると以下のようになります:
- 運営メンバーでアドベントカレンダーの開催を決める
- 各年の執筆ルールを決めて,執筆者を Slack 等で現役の学生メンバーやOB・OGから募る
- 世話係が不足している執筆者を募ったり,予定を調整したのちサイトに公開する
2の今年の執筆ルールはこちらで公開されていますが,この内容は初版からあまり大きく変わっていません.ポイントとしては,できる限りテーマ等の制約は出来る限り少なくして,執筆者が様々な記事を書きやすいようにしています.また,希望があれば CAMPHOR- のブログのアカウントを提供することで,個人のブログを持っていない参加者のハードルを下げています.一方で締め切り (毎日0時) は比較的厳しく運用していて,執筆者の締め切りへの意識を高め記事の欠落を予防しています.
3の世話係の仕事は少し手間になるのですが,この作業を行うことによって執筆者の予定に配慮した無理のないスケジュール組みが可能になっています.また,アドベントカレンダーの文化に慣れていない参加者でも,参加しやすいような環境を作っています.
技術的な面では静的サイトジェネレーターのような形で実装されており,コードは GitHub で公開されています.記事の追加・変更等は YAML ファイルを変更するだけで,CI・CD によって基本的に自動的に公開されるようになっています.
成果
このようにして始まった CAMPHOR- Advent Calendar ですが,これまでのところ概ね成功を収めているように思います.2020/12/25 までに,のべ58人による176の記事が投稿される予定となっています.
記事のテーマもソフトウェアエンジニアリングにとどまらず,ハードウェア・研究・生活・健康・キャリアなど様々なトピックに渡っています.執筆者も学生エンジニアだけにとどまらず,デザイナー・経営者・OB/OG など様々なメンバーが投稿してくれています.
このようにアドベントカレンダーを継続できている理由は,まず第一に執筆者の皆さんが毎年良い記事を書いてくれたことにあります.また,前節の運営の仕組みが大きな変更がなくとも,比較的うまく回っているのも一つの理由と考えられます.今後も環境の変化に合わせて仕組みを調整しながら継続できると良さそうです.
改善: 過去の記事を探しやすく
さて,ここまでは主にこれまでの取り組みの振り返りを書いてきました.せっかくの機会でもあるので,もう少し技術的な側面から CAMPHOR- Advent Calendar を改善してみようと思います.
前述の通り CAMPHOR- Advent Calendar はこれまで約170の記事がまとめられています.面白い記事がたくさんあるのですが,記事数が増えていることや,トピックが多岐に渡っており過去の記事が少し探しにくくなっているという問題があります.
記事のタグ付け
今年の CAMPHOR- Advent Calendar の新機能として,各記事にタグをつけて表示する試みを始めました.これは人間が手動で記事の内容をもとにタグをつけて, YAML に登録することで実現しています.
記事につけられたタグをワードクラウドの形で表示すると以下のようになり,改めて様々なトピックの記事があることを確認することができます.
現在,タグで記事を検索する機能等は実装されていませんが,ブラウザのページ内検索等も併用することである程度記事が見つけやすくなっていると思います.
自然言語処理
手動でのタグづけである程度面白い結果が得られたので,もう少し自然言語処理の技術を借りて,過去の記事を分析してみようと思います.この節に対応する Python のコードは GitHub で公開しています.筆者は自然言語処理の専門家ではないこと,また短時間で行った分析であるため色々と粗が目立つことに注意してください.この記事を自然言語処理の方法として参考にすることはお勧めしません.
まず,解析対象のデータを準備するためにこれまでの記事の HTML をダウンロードし,本文の部分のプレーンテキストを取得します.これは Python の requests (HTTP クライアント) + readability-lxml (本文抽出) + html2text (HTML→プレーンテキスト変換) で,ある程度精度のの良いものを簡単に得ることができました.
tf-idf
次に,MeCab で形態素解析を行い名詞を抽出し,各記事の tf-idf を計算してみます.各記事の tf-idf の上位5単語をまとめたスプレッドシートをこちらで公開しました.例えば「家の電気使用量を可視化する」からは「スマートメーター」「Prometheus」「Grafana」などタイトルには含まれていないものの,本文には含まれている特徴的なキーワードがある程度うまく抽出できているように見えます.そのままタグに使うのは難しいものの,記事選びの参考にはできるかもしれません.
前処理をきちんと行っていないため,本文中のソースコードに含まれているキーワードやストップワードも結果中にみられます.例: 「スプラトゥーン2の戦績データを取得する+おまけ」の「area」「result」「win」など.この辺りはもう少し時間をかけてきちんと前処理するとよりきれいな結果が得られそうです.
doc2vec
次にある記事を読んだ人は関連する類似記事にも興味があるという仮説のもと,doc2vec を使ってそれぞれの記事の類似記事を推薦することを考えてみます.こちらも,MeCab で抽出した名詞をもとに,Gensim の doc2vec の実装を利用して類似記事を求めました.こちらの結果もスプレッドシートとして公開しています.
こちらはなかなか面白い結果が得られました.例えば「誰得なAtomのSyntax themeを作った」という記事に「ProjectileとHelm」という Emacs についてのエディタ関係の記事が表示されていたり.「これからプログラミングを始める君へ」という記事に「看護学生がCAMPHOR-を訪れてUnityの勉強を始めるまで」「「Webサービスを作りたい!」と思ってから実際に作るまで5年かかった」「初心者がエンジニアの卵になるための方法。」のような初心者向けの記事がまとめて表示されています.
こちらはまだ advent.camph.net に統合することはできていませんが,興味のある方はぜひスプレッドシートから関連記事を辿ってみると面白いかもしれません.
まとめ
この記事では CAMPHOR- Advent Calendar の7年間を企画や運営などの取り組みの観点や,これまでの記事を使った自然言語処理といった観点から振り返ってきました.様々な執筆者による様々な記事が毎年公開される,面白い企画であることが再確認できたので,今後もうまく続いていくと良いなと思っています.
この記事を読んで CAMPHOR- Advent Calendar の過去の記事の興味を持った方は,ぜひサイトからタグも参考に記事を探してみてください.また,doc2vec による類似記事のおすすめ表も興味のある記事を探すのに役立つかもしれません.
CAMPHOR- Advent Calendar 2020 20日目の担当は @5ebec です.お楽しみに!