Railsを使っている組織の検索サービス usingrails.com を立ち上げました(翻訳)
Rails World(くっつけずに2語で表記するのが正式です)開催の1〜2週間前に、UsingRailsというWebサイトを立ち上げました。これは、Railsをベースに取り入れている組織や企業のリストを提供する一種のディレクトリサービスです。
これは、短期間で構築されたRailsアプリケーションに関する長年に渡る調査の集大成であり、言ってみれば世界最大のメモアプリです。
🔗 サイト構築の動機
私は長年Rails開発者として活動してきました。いくつかのRailsアプリケーションを構築し、コミュニティ活動にもしばらく従事していたことがあります。Railsには、「かつてはWebアプリケーション構築に優れたプラットフォームだったが、もはやそうではなくなった」という外部からの評判があります。Railsフレームワークは改善と進化を絶え間なく繰り返しており、小規模チームが使いやすいWebアプリケーションやネイティブアプリケーションを(楽しく)構築するベストの手段となっているにもかかわらず、そうした評判が立っているのです。
UsingRailsは、そうしたナンセンス/嘘/誤解を正すための方法のひとつです。
私はここしばらく、Railsをベースとしている組織のリスト(主にドメイン名)を、世界で最も雑多なメモアプリに集めていました。情報源は、各種ニュースレターや求人情報、Rubyメーリングリストです。また、以前Irina1が登壇したRailsConfキーノートについて彼女と雑談していたときに、このリストを公開してはどうかと薦められたこともありました。
🔗 技術的側面
当然ながら、同サイトはRailsで構築されています。この作業は、(プレリリースの)Rails 8でアツアツの新しい機能を試すチャンスでした。小さな非互換性やマイナーなバグのため、構築の途中から7.2に戻す必要がありましたが、近々Rails 8にアップグレードする予定です2。
このアプリではSQLiteを利用しています。また、Stephen MargheimがRailsConf 2024のワークショップや後日の発表や記事で推奨していた、さまざまな提案や改善も盛り込んでいます。
バックアップはlitestream-ruby
gem経由で行い、SQLiteのulid拡張をsqlpkg
gem経由で主キーとして使うというStripe風のスタイルを採用しました。Rails 8ではSQLiteのサポートが大幅に進歩しているおかげで、すべてが驚くほどスムーズに行きました。
ホスティング場所は(さしあたって)Digital Oceanとし(Active StorageとSQLiteバックアップには同サービスのS3互換のファイルストレージを利用)、Chris OliverのHatchboxをデプロイに使いました。
これは、クラウドプロバイダの外部を調査して、VPSライクなソリューションにデプロイする方法の現状を確認するチャンスでした。手短に言うと、この(再)学習体験は非常に素晴らしく、私が主に業務で使っているHerokuへの挑戦状と言えます。
私は早い時期からSolid Queueを採用しており、production環境とdevelopment環境の両方で複雑な依存関係と縁を切る新しい方法が見えてきました。
そういうわけで、私が最先端に切り込んだ結果として、オープンソースにささやかな「貢献」ができました。ある意味で。「SQLiteを使っていてこんなぶっ壊れに遭遇したけどどうしたらいいですか?」というissueを十分詳しく書いて投稿した(#324)のですが、たちまち私よりずっと強いコミュニティメンバーたちが現れて議論し、最終的にめでたく解決してくれました(#558)。10人中10人が、また何かをぶっ壊すことでしょう。Mike、Rosa、Stephenのおかげです。
私の収集しているデータのレベルと管理画面の保護のバランスに配慮した、最小限のテストを書きました。しかし普段CoverageBookの業務で使っているRSpecの代わりにminitestでテストを書いてみると、とても気に入ってしまいました。
その他にも、Railsの洗練された設計思想を備えた、実績の優秀なgemをいくつか採用しました。Kasper作のactive_job-performs
gemや、Jean作のfrozen_record
はこれまで真面目に使ったことがなかったのですが、どちらもおすすめです。
また、authentication-zero
gemのジェネレータを用いて、同サイトへのサインインに使うGitHub認証のみを有効にしました。GitHub認証の主な使い道は、偽のアカウントや組織がディレクトリサービスにスパム情報を書き込むのを回避するためです。これらはすべて手動でレビューしています。
🔗 立ち上げ
同サイトを立ち上げた時点では1,500の組織が登録されていましたが、ひと月もするとコミュニティが自主的に毎日組織を追加するようになり、500件以上追加されました。
SNSへのサイト立ち上げ投稿への手応えや、同サイトで自社や自分たちが知っている組織を調べたり追加したりしている人々の全般的な雰囲気に、私は非常に満足しています。
私が普段から使っているお気に入りのソリューションであるAppSignalは、サイトのパフォーマンス監視をプラグアンドプレイで利用できます。私のサイトを同サービスで監視しているうちに、Rails 8の技術スタック特有の技術の組み合わせ(SQLite、Solidナントカなど)によって、アプリが非常に高速かつレスポンスも高まっていることがわかってきました。
UsingRailsサイトのことがRedditに投稿されると、たちまち新たな組織登録が殺到するようになったので、このサイトの存在をもっと広く知らしめるのがよいことは明らかです。みなさんも自社や自組織が登録されているかどうか見に行ってみてはどうでしょうか?
🔗 将来
このサイトは生まれたてではありますが、今後コミュニティにとって明らかなメリットであり手頃な遊び場でもあるような何らかのサイドプロジェクトを新たに立ち上げることを楽しみにしています。Railsエコシステムにおける就職・転職活動や社会的証明、そして「あまり知られていない中規模企業」がどれだけ膨大な数にのぼっているかを把握するのによいチャンスです。
同サイトのコードに貢献できるかという問い合わせをいくつかいただきましたが、まだ自分以外の人たちのコードの面倒まで見る準備がてきておらず、今は自分のプライベート活動としてコードベースのハックを楽しんでいるところです。もしかすると今後可能になるかもしれません。改善に役立ちそうな耳寄り情報をお持ちでしたら、ぜひお知らせください。
今は、大きな広がりと深さを備えたコミュニティの表層にやっと触れているだけなので、今後はもっと多くのデータを収集することを検討し始めています。同サイトに初めてアクセスした人たちからいただくフィードバックや洞察はサイト改善に大いに役立っています。ご提案がありましたら、ぜひメールでお知らせください。
概要
元サイトの許諾を得て翻訳・公開いたします。
日本語タイトルは内容に即したものにしました。