Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

AgricolaDevJP という org を作りました

GitHub org: AgricolaDevJP

GitHub 上で AgricolaDevJP という organization を立ち上げました。今さっき作ったみたいな書きぶりをしていますが、実際に org を作ったのは 2022 年 8 月ごろです。もう半年以上経っていますね。

github.com

これまで、ボードゲーム関連、とりわけアグリコラに関連したアプリケーションをいくつも個人開発してきました。

db.buratsuki.page

app.buratsuki.page

これらのリポジトリを、これまでは自分の GitHub アカウント(@Arthur1)にぶら下げて公開していました。今後作るものに関してはこちらの organization に紐づけて公開することになります。

組織としての AgricolaDevJP の目的は以下の3つです:

  • アグリコラに関する様々なアプリケーションの開発と運用
  • 上記を手軽に開発するためのライブラリや API の開発と運用
  • 技術検証や交流

一緒に開発したい!というアグリコラプレイヤーがいたらぜひ id:arthur-1 まで一声おかけください。リポジトリは基本的に公開しているので fork して contribute できるはずですし、知り合いであれば organization にメンバーとして招待もできます。目的に合致するものでしたら、この org 下でソースコードを公開しても構いません。

自分以外の人がコードを自由にいじれる状態にリスクがあるのも承知していて、適切な権限を持ったロールを割り当てるなどの準備もきちんとしています。このあたりの管理には、 Terraform の GitHub Provider が役に立ちました。

registry.terraform.io

org を作ったきっかけ

自分のリポジトリが増えてきたので整理したい

@Arthur1 下のリポジトリは 2023 年 3 月現在、プライベートを含め 98 個あります。しょうもないリポジトリ*1も多々あるのですが、しょうもなくないものも大分多くなってきました。

自分が個人開発として丁寧につくるもののほとんどがアグリコラ関連であることから、これらを別 org に切り出すことで整理がつくかなと思ったのです。

自分だけで開発・メンテはしんどい

これまでいろんなものを作ってきたのですが、自分だけで開発・運用・保守のすべてをやるのはかなりしんどいです。学生時代ならまだしも、今はフルタイムで働いており自由に使える時間も限られています。

アグリコラ関連の開発には、どうしても人力でやらなければならない toil がつきまといます。たとえば、延々とカードのテキストを入力する、playagricola というサイト上で管理されている ID と丁寧に紐づける、といった作業があります。これらは正直やる気があれば誰でもできることなのですが、今は自分が全部やっています。ここがボトルネックになって何ヶ月もサービスをリリースできないことがままあります。

とすると、手伝ってくれる他人を招待したくなってくるのですが、個人のリポジトリに他のユーザーを admin として招待することはできません。そこで、organization による管理にしてしまおうと思ったわけです。

気持ち的には、下のエントリの事例がやや近いですね。

motemen.hatenablog.com

バトグラ技術部への憧憬

やるからには、この organization を GitHub 上の単なる organization を超えた存在にしたいと考えています。

自分が目指しているのはバトグラ技術部というコミュニティです。バトルグラウンドというオートチェスライクなゲームがあって、僕も好んでよくプレイしています。

note.com

このゲームの戦略を研究するためのトラッカーやシミュレーターなどを提供しているのがバトグラ技術部です。開発者とユーザーの距離が近く、集めたデータが素早く有効に活用されているところがとても良いなと思っています。少なくとも自分一人でやっている状態からすると雲の上のような存在です。

The State of AgricolaDevJP

この org を自分がどういう風に使っていくか、という現在とちょっと先の未来までの話をします。

砂場としての AgricolaDevJP

普段の仕事で得た知識を用いて実践する砂場として AgricolaDevJP を活用します。この 1年間で自分が新たに学んだこととして、

などがあるのですが、これら新たに身につけた技術を積極的に使うようにしています。

逆に、この org での活動で得た知識を仕事に還元することもできています。この org で試しにやってみて良い設計の決定をしたなと思うことについて、仕事のチームに持ち帰りブラッシュアップした上で ADR を書きました。このあたりの話はまたどこかでします。

持続的なサービス提供のために

バトグラ技術部を目指すためのリソースを確保するためにやるべきことは、現在自分依存になっている開発・運用・保守を自分からできる限り引き剥がすことだと思っています。

テストの用意、CI・CDの整備、Dependabot の導入などを通じて、自分が手作業でやらなければならないことを極力削減しようと試みています。運用面についても、監視を導入する、インスタンスの管理をしなくて済むように FaaS や CDN などを利用する、などの改善を進めています。

今自分が提供しているものがどのように運用されているかというと、1つの VPS 上に複数サービスがコンテナを使わずにごった煮になっているという状況です。デプロイも全手動だし、他のサービスにも関わるので PHP のメジャーバージョンを上げられないなどの弊害も発生しています。デプロイにダウンタイムが発生するので、深夜作業が避けられません。また、Chef などの構成管理もしていないしバックアップもほぼ取っていないので、このサーバが何らかの事故で吹っ飛んだら元の状態に戻すことはできないでしょう。

最低限今サービスを提供できている状態なので、自分の手から離し、持続的にサービスを提供する仕組みづくりのために一旦しゃがむという選択をします。

AgricolaDB をリニューアルします

AgricolaDevJP org 下で開発したものの最初のリリースは AgricolaDB のリニューアル版にすることを予定しています。このサービスは利用者が多いものの、前述の通り、今の仕組みでは維持が大変になってきました。

こちらのサービスを具体的にどのようにリニューアルするかについては、近日エントリを書く予定なのでお楽しみに。

最後に

「技術で農場を楽しく豊かにしたい」
アグリコラプレイヤー、募集中