for Startups Tech blog

このブログのデザインを刷新しました。(2023/12/26)

LINEで朝活!技術トレンドを1日1分でキャッチするツールを作ってみた

こんにちは、フォースタートアップス株式会社の李です!

今回は、毎日の技術トレンドを簡単にキャッチアップできるツールを開発したので、紹介させていただきます。

目次

はじめに

皆さん、技術トレンドを毎日追えていますか?

僕は全くと言っていいほどできていません。技術記事を読むよりもゲームを遊んだり漫画やアニメを見たりしたい派です。でも、エンジニアとして成長するためには日々の情報収集が重要ですよね。今回はそんな課題を解決するファーストステップなるものを作ってみました。

作ったもの

その名も『Daily Tech Digest』です!

毎朝9時にQiitaの人気記事を1件、LINEに送信するシンプルなツールです。

特徴

  • 簡単に始められる
    • LINE Botを使用しているので、QRコードをスキャンして友達追加するだけで利用できます。
  • 送るのは1件だけ
    • 最初は「記事を読む時間を1日の中に取り入れること」を習慣化することを目標としているので、ハードルを下げるために1件だけにしています。
  • 毎朝9時に配信
    • 習慣化に大事なのは、「毎日すること」「同じ時間帯にすること」だと考えています。通勤中や朝のコーヒータイムに読むことを想定して朝9時に配信しています。

使用技術

『Daily Tech Digest』の開発では、以下の技術を採用しました。それぞれの選定理由と技術的な特徴を詳しく紹介します。

  • LINE Messaging API
  • Cloudflare Workers
  • Hono

1. LINE Messaging API

LINE Botを構築するために使用したAPIです。ユーザーとLINE上でメッセージをやり取りする仕組みを提供してくれます。

特徴

  • 送信できるメッセージの種類が豊富。
  • 日本語の公式ドキュメントが充実しており、開発がスムーズに行える。
  • 普段から使うアプリなので記事配信の通知が目に入りやすい
  • 将来的には社外の方にもお届けしたい!

2. Cloudflare Workers

サーバーレスプラットフォームとしてCloudflare Workersを採用しました。JavaScriptの実行環境をクラウド上で提供し、リクエストごとに軽量な環境を生成します。

特徴

  • 応答が早い
    • 将来的にはユーザーからのメッセージに対して何かしら返答する機能も作りたいと考えていました。
  • デプロイが簡単
    • プロジェクト下で以下のコマンドを実行するだけです。
    • wrangler deploy
  • 無料(一番重要)
    • とは言っても厳密には以下の制限があります
      • 10万リクエスト/日
      • リクエストあたりのCPU処理時間:10ミリ秒以内
      • デプロイサイズは1MBまで

技術的ポイント

  • 0msコールドスタート

    • 一般的なサーバーレス環境(AWS Lambdaなど)では、一定時間アクセスがないとその度に起動時のオーバーヘッドによる遅延が発生してしまいます。(これをコールドスタートと呼びます)

    • それに対してCloudflare Workersはisolateと呼ばれる機能を使うことで、オーバーヘッドを大幅に削減しています。

    • isolateとはJavaScriptエンジンV8が持つ機能で、軽量かつ迅速に多数の分離された実行環境を用意することができます。下記画像右側のように、実行環境を多数の空間に分離することで実行環境起動時のオーバーヘッドを削減しているようです。

      引用:How Workers works

  • コード実行までが早い

    • 通常クライアントからサーバーにHTTPリクエストするまでに、以下のようにTLSハンドシェイクが行われます(証明書を送り合ってサーバーとの接続を保護する処理)
      引用:Eliminating cold starts with Cloudflare Workers
    • Cloudflare Workersは2020年にさらに最適化され、HTTPリクエスト完了前に処理を始められるようになりました。TLSハンドシェイクにおける最初の手順の「Client Hello」が送られてきた時に実行環境が読み込まれてコードをコンパイルし始めるみたいです。すごい!
      引用:Eliminating cold starts with Cloudflare Workers

3. Hono

Webページ、Web APIを作るのに便利なフレームワークです。

Cloudflare/Deno/Bun/Node.jsなど様々な環境に対応しています。

特徴

  • ルートハンドラーが非常に簡単です

    ⬇︎たったこれだけでルートにリクエストが来たら”hello”を返す処理が書けます!

      import { Hono } from "hono";
    
      const app = new Hono();
    
      app.get("/", async (c) => {
        return c.text("hello");
      });
    
      app.fire();
    
  • まだ複雑なロジックは作成していないので、また新たな発見があれば別の記事で紹介できたらなと思います!


開発で意識したこと

個人開発では、最小限の機能でリリースすることが重要です。大きなスコープを設定すると挫折しやすいため、シンプルで続けられる範囲に収めました。

使ってみた感想

1週間使ってみたところ、以下の点に気付きました。

  • 習慣化の効果

    • 自分で作ったツールを使う楽しさもあり、毎日送られてくる記事を読む習慣がつきました。
  • 課題

    • 同じ記事が送られてくる
      • 単純にQiitaのランキング一位の記事を取得しているので、連日同じ記事が送られてきてしまうケースがたまに発生します。
    • 送られてくる記事が個人の関心ごとにあまり一致しない
      • 1週間ほど読み続けましたが、Qiitaのトレンド1位になる記事は基本的に初学者向けの内容が多かったです。「AI関連ツールまとめ」「windowsの便利ツールまとめ」など
      • 「TypeScriptの〇〇というフレームワークで〇〇作ってみた」系の記事が送られてくることを期待していたので変更が必要そうです。

社内勉強会での反響

社内勉強会で発表した際、以下のような意見をいただきました。

  • 「1記事だけ送るのがちょうどいい!」
  • 「調べたい情報に応じてカスタマイズできると面白いね。」
  • 「Cloudflare Workersは常駐が必要?」

これらのフィードバックは今後の改善に活かしていきたいと思います。

発表に使った資料です!よければ合わせてご覧ください。

今後の展望

  • トレンドの再定義
    • 「どのジャンルをトレンドとして捉えるべきか?」や、「どの情報がトレンド理解に繋がるのか?」といった視点で、配信内容の見直しを行いたいと考えています。
  • データベースの導入
    • 記事の配信履歴やユーザー登録タグなどの機能を追加したいのでCloudflare D1(サーバーレスなSQLデータベースサービス)を導入してみたいです。

現状はユーザー全員に同じ内容を一斉配信していだけなので、今後はパーソナライズされた情報提供が可能になることを目指していきたいです!

まとめ

自分で試行錯誤しながら作り上げたツールには愛着が湧きます。そして、「もっと良くしたい!」という気持ちが、自然と技術キャッチアップのモチベーションに繋がっていることに気づきました。

今回の開発で使用したCloudflare Workersは、無料で始められる手軽さと高性能が魅力で、個人開発に非常に適していると感じました。ぜひ試してみてください!