開発
ブログ
個人開発

技術投資でブログを作った話

created: 2021-12-23 / updated: 2022-10-06
1016 views

この記事は、 Livesense Advent Calendar 2021 23日目の記事になります。

株式会社リブセンスでアプリケーションエンジニアをしております、伊藤と申します。リブセンスに新卒入社して、もうすぐ丸2年になります。
今回は、「技術投資」と呼ばれる時間の中で、今みなさんが見ているこのブログを作った話をしたいと思います。

技術投資とは

リブセンスのエンジニアの義務として、「業務時間の 10 % は技術投資枠とする」ことが定められています。
工数のすべてを事業要請に基づく開発・運用に割いてしまうと長期的にメンテナンス性や生産性を損なうため、最低限 10 % の工数はエンジニア観点での改善に投資しなければならないというものです。技術投資の時間を何に使うかはエンジニアの裁量で決めてよく、サービスの負債解消や触ったことのない技術への挑戦、勉強会などに使われている事例が多いようです。

ブログシステムを構築した経緯

昨年9月に研修を終えて事業部に配属されたのですが、当時の僕はWebアプリケーションフレームワークやDB以外の知識がまるでなく、Webサービスがどのようにして動いているのかを全く理解していませんでした。nginx って見たことあるけど何て読むの? rails s でサーバーが起動するっぽいのは知ってるけど、それじゃサービスは動かないの? puma ? ロードバランサ? Apache ? とかそんな感じです。
一通り概要を勉強し、nginx はエンジンエックスって読むのかとか、WebサーバーとWebAPサーバーってのが別物として存在するのかとかが分かったところで、実際に触ってみることにしました。
今回の主眼はWebサーバーに触ってみることだったので、Webアプリケーションフレームワークはよく慣れた Rails で、さらに Rails で実装するアプリケーションもそれほど難しくないものにしようと思っていました。さらに、はてなブログや Qiita など複数のブログアカウントを持たなければいけない面倒さや、既存のブログシステムだとアクセス解析などの面でできることが多くないことに不満を持っていたので、ブログシステムを構築することにしました。

作業記録

  • 期間: 2021/01/08 に検討を始め、2021/04/26 にはドメイン取得まで終わったのでひと段落。その後は Rails の領域を中心にちまちま実装して、 2021/09/12 にブログとして公開。
  • お金:
    • さくらのVPS: 7,078円/年
    • ドメイン: 3,982円/年( .jp しか残ってなかったので、少々割高)

構成

  • heroku だと簡単すぎる一方で、従量課金だとトラブルも多いと聞いていたので、さくらのVPSを選定。
  • 技術セットは、業務で使用していたものを中心に nginx + puma + Rails + MySQL を選定。
  • 開発環境は docker で、デプロイフローは Capisrtano で構築。
  • issue は github 上で管理。

実装で工夫したところ

ゆくゆくはレポジトリを公開したいと考えているので、詳細はその時に記事にしたいと思いますが、 nginx 関連で1点あるので記載します。

別途導入しているアクセスログを見ていると、http + IPアドレス直打ち でアクセスしてくるログが多数あることがわかりました。そこで、① http でアクセスされたら https にリダイレクトする ② IPアドレス直打ちでアクセスされたら 404 を返す 実装としました。

# /etc/nginx/conf.d/ssl.conf

    server {
-     listen 443 ssl http2 default_server;
-     listen [::]:443 ssl http2 default_server;
+     listen 443 ssl http2;
+     listen [::]:443 ssl http2;
      server_name ryoito.jp;
      ...
# /etc/nginx/sites-enabled/myBlog

    server {
-     listen 80 default_server;
+     listen 80;
+     server_name ryoito.jp;
      return 301 https://$host$request_uri;
    }
# /etc/nginx/conf.d/forbid_raw_ip.conf

+     server {
+       listen 80 default_server;
+       server_name _;
+       return 404;
+     }
+
+     server {
+       listen 443 ssl default_server;
+       server_name _;
        ...
+       return 404;
+     }
+

今後実装していきたいところ

  • レポジトリに nginx の設定ファイルを置くディレクトリを作って、 git 管理・デプロイ時に自動反映したい。
  • ブログ記事に画像を埋め込めるようにしたい。(この記事に合わせて実装しようとしたのですが、間に合いませんでした、、)
  • 記事作成などの管理者用ツールは手抜きで作っているので、改良したい。

ということで、技術投資で作ったブログについてでした。個人でサービスを運用できるようになりたいと思っているので、良いステップになったと思っています!
明日は、@keyoris さんより、Androidの課金実装についてです!