<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>TechAmply</title>
        <link>https://techamply.com</link>
        <description>tech blog</description>
        <lastBuildDate>Thu, 30 Apr 2026 12:50:48 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>ja</language>
        <copyright>© 2023 techamply</copyright>
        <atom:link href="https://techamply.com/feed" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[AWS認定試験を受けてみた]]></title>
            <link>https://techamply.com/article/yem7nxfm2</link>
            <guid isPermaLink="false">https://techamply.com/article/yem7nxfm2</guid>
            <pubDate>Thu, 29 Aug 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="h8d027c8ed3">はじめに</h2><p>これまで仕事でAWSに触れてきましたが、資格の取得はしていませんでした。そこで、今回AWS認定クラウドプラクティショナー(CLF)とソリューションアーキテクト アソシエイト(SAA)の資格を取得することに挑戦しました。</p><h2 id="h8801b89e4b">AWS認定クラウドプラクティショナー(CLF)</h2><p>まずはSAAの前に、基礎となるCLF(クラウドプラクティショナー)を受験しました。勉強方法は、<a href="https://aws.amazon.com/jp/training/learn-about/cloud-practitioner/">公式の動画</a>を視聴した後に<a href="https://amzn.asia/d/gH6wUl3">「クラウド試験徹底対策シリーズ CLF」の問題集</a>を徹底的に解くというシンプルなもの。これを2週間続けた後、試験に挑みました。</p><p>出題される問題は比較的理解しやすく、難易度は思ったほど高くありませんでしたが、実際の試験は教材の問題よりも少し難しいと感じました。それでも、無事に合格点の780点を超えることができました。</p><h2 id="h05f035be53">AWS認定ソリューションアーキテクト アソシエイト(SAA)</h2><p>CLFが予想以上に順調だったため、SAAも同様に簡単に合格できるだろうと油断していました。しかし、実際に<a href="https://amzn.asia/d/itprmkc">練習問題</a>に取り組んでみると、CLFよりも数段階難易度が上がっていることに気付きました。最初の予定では2週間で試験を受けるつもりでしたが、練習問題で80点以上を取ることができず、試験日を1週間後に延期することにしました。</p><p>そして、試験当日を迎えたところ、練習問題よりも明快な問題が多く、結果として900点を獲得することができました。</p><h2 id="ha214098e44">まとめ</h2><p>CLFは、AWSの基礎知識を持っていれば暗記だけで合格可能な試験です。しかし、SAAはAWSの知識に加え、コンピュータサイエンスに関する理解も求められる問題が含まれており、より深い知識が必要です。</p><p>1ヶ月半の勉強時間と約3万円の費用をかけて資格を取得しましたが、その価値は十分にあったと感じています。特に、AWSのサービスに対する理解が深まり、インフラの選択肢が広がったことは大きな収穫です。</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[私のキーボード遍歴]]></title>
            <link>https://techamply.com/article/g1sie8-vv8</link>
            <guid isPermaLink="false">https://techamply.com/article/g1sie8-vv8</guid>
            <pubDate>Thu, 08 Aug 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="h8d027c8ed3">はじめに</h2><p>新しいキーボードを購入したので、これまで使ってきたキーボードの使用感をレビューしていこうと思います。</p><h2 id="h940e41aa76">歴代キーボード</h2><h3 id="hc77dae2f2b">HHKB Professional JP</h3><p>エンジニアを目指してMacBookに続いて購入したのが、このキーボードでした。</p><p>当時はMacBookのキーボードを使っていましたが、HHKBに変えてから入力が格段に楽になったことを覚えています。</p><h3 id="he65f84e67a">HHKB HYBRID Type-S</h3><p>HHKB Professional JPを使い続ける中で、二つの問題点が浮上しました。</p><p>	1.	有線であること</p><p>	2.	打鍵音が大きいこと</p><p>デスク環境を整えるうちに、ケーブルが邪魔になることが増えてきました。また、最初は気にならなかった打鍵音が、いつしかガチャガチャと響くようになり、気になるようになりました。</p><p>そこで、HHKB Type-Sに移行しました。上記の問題は解決し、非常に快適なタイピングができるようになりました。</p><h3 id="h19011f6e5a">自作キーボード沼</h3><h4 id="h48792c2c18">Keyball39</h4><p>自作の分割式有線39キーのキーボードです。</p><p>HHKBに満足していたはずの自分が、Twitterで見かけたKeyball39に衝撃を受け、深く考えずに購入してしまいました。</p><p>高校生の授業以来のハンダ付けに苦戦しながらも、なんとか完成させましたが、分割式、トラックボール、レイヤー機能に全く慣れず、今でもメインで使うには至っていません。</p><h4 id="h02bcee3c18">Wings42</h4><p>自作の分割式無線対応42キーのキーボードです。</p><p>キーボードを自作する楽しさに目覚め、もう一つ作りたくなりました。数あるキーボードの中で、デザインが一番気に入ったWings42を選びました。</p><p>2度目の組み立てだったので、スムーズに作業を進めることができました。しかし、レイヤーの使い方を覚えられず、結局有効活用できていません。</p><h2 id="ha214098e44">まとめ</h2><p>最終的には、メインキーボードはHHKB Type-S、サブにはKeyball39、そして外出時にはwings42という使い分けをしています。</p><p>最近、Keyball39の無線化キットが販売されているようなので、無線化にも挑戦したいと思っています。</p><p></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[新しいエディターHelixを試してみた]]></title>
            <link>https://techamply.com/article/i10da05lmlt8</link>
            <guid isPermaLink="false">https://techamply.com/article/i10da05lmlt8</guid>
            <pubDate>Thu, 20 Jun 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="h8d027c8ed3"><strong>はじめに</strong></h2><p>今まで、VSCodeを利用してきましたが、新しいエディタを試してみたくなりました。</p><p>そこで、Atomの作者が作った<a href="https://helix-editor.com/">Helix</a> を試してみました。</p><h2 id="h5244c135f7">利点</h2><h3 id="h581c9f8b53">1. Rust製で高速</h3><p>CPUとGPUを効率的に活用し、高速に動作するよう設計されています。</p><h3 id="ha58db682ef">2. 言語対応</h3><p>特別な設定なしで、シンタックスハイライトやインデントに対応しています。</p><p>さらに、Language Server Protocolに対応しているため、自動補完、ナビゲーション、診断、リファクタリングなどをプラグインなしで利用できます。</p><h2 id="h89f616d631">欠点</h2><h3 id="h90839aab75">1. Vimモードの問題</h3><p>厳密にはVimモードは存在しますが、通常のVimとは異なり、キーバインドを変更しても違和感があり、慣れることができませんでした。</p><h2 id="ha214098e44">まとめ</h2><p>1週間ほど利用してみましたが、概ね快適に使えました。しかし、Vimモードに慣れることができず、現在は再びVSCodeを使用しています。</p><p>新しくて高速なエディタを探している方は、ぜひHelixを試してみてください。</p><p></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[RailsのHTMLメールをCSSで装飾する]]></title>
            <link>https://techamply.com/article/sihbsn_z6n</link>
            <guid isPermaLink="false">https://techamply.com/article/sihbsn_z6n</guid>
            <pubDate>Thu, 23 May 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="h8d027c8ed3">はじめに</h2><p>デフォルトのRailsメールはスタイルが適用されておらず、HTML形式で送信しても見た目はほとんどテキスト形式と変わりません。しかし、メールにCSSを適用する場合、各タグの属性にすべてのCSSルールを記述する必要があり面倒です</p><p>ここで、<a href="https://github.com/fphilipe/premailer-rails">premailer-rails</a>を利用することで、HTMLとCSSを別々のファイルで管理することができます。</p><h2 id="h4d849f4362">使い方</h2><p>まず、<code>Gemfile</code>にgemを追加します。</p><div data-filename="Gemfile"><pre><code class="language-ruby">gem &apos;premailer-rails&apos;</code></pre></div><p>次に、<code>app/views/layout/mailer.html.erb</code>にstylesheet_link_tagを追加します。</p><p>CSSファイルは<code>/public/static/css</code>配下に設置します。</p><p>リセットCSSは<a href="https://github.com/dudeonthehorse/normalize.email.css">こちら</a>を参考にしました。</p><div data-filename="/app/views/layout/mailer.html.erb"><pre><code class="language-ruby">&lt;html&gt;

  &lt;head&gt;

    &lt;%= stylesheet_link_tag &apos;/static/css/normalize.css&apos;, media: &apos;all&apos; %&gt;

    &lt;%= stylesheet_link_tag &apos;/static/css/extra.css&apos;, media: &apos;all&apos; %&gt;

    &lt;%= stylesheet_link_tag &apos;/static/css/outlook.css&apos;, media: &apos;all&apos; %&gt;

    &lt;%= stylesheet_link_tag &apos;/static/css/mailer.css&apos;, media: &apos;all&apos; %&gt;

  &lt;/head&gt;

  &lt;body&gt;

  &lt;/body&gt;

&lt;/html&gt;</code></pre></div><p>これで、HTMLメールにCSSが適用された状態で配信されます。</p><p></p><h2 id="h3de35099b3">参考</h2><ul><li><a href="https://github.com/fphilipe/premailer-rails">premailer-rails</a></li><li><a href="https://github.com/dudeonthehorse/normalize.email.css">normalize.email.css</a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[miseを活用したRuby LSPの設定ガイド]]></title>
            <link>https://techamply.com/article/ppgbxaoaw35</link>
            <guid isPermaLink="false">https://techamply.com/article/ppgbxaoaw35</guid>
            <pubDate>Thu, 09 May 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="h8d027c8ed3">はじめに</h2><p>Visual Studio Codeでmiseを利用する場合、その設定方法は<a href="https://github.com/Shopify/vscode-ruby-lsp/blob/main/VERSION_MANAGERS.md">公式ガイド</a>に詳しく記載されています。しかし、Homebrewなどを通じてmiseをインストールした際には、予期せぬエラーが生じることがあります。この記事では、そのような問題への対処法を解説します。</p><h2 id="h6148b38985">対応方法</h2><p>miseの設定には、以下のJSON設定がREADMEに示されています。</p><div data-filename="config.json"><pre><code class="language-json">    &quot;rubyLsp.rubyVersionManager&quot;: {

        &quot;identifier&quot;: &quot;custom&quot;,

    },

    &quot;rubyLsp.customRubyCommand&quot;: &quot;eval \&quot;$(mise env -s fish)\&quot;&quot;,</code></pre></div><p>標準のインストールパスである /.local/bin/mise 以外に、例えばHomebrewを用いてインストールした場合、パスが異なるために ruby-lsp が起動せず、エラーが発生します。</p><p>この問題を解決するためには、最近の変更で追加された miseExecutablePath オプションを使って、miseの実行パスを適切に設定することが重要です。</p><div data-filename="config.json"><pre><code class="language-json">    &quot;rubyLsp.rubyVersionManager&quot;: {

        &quot;identifier&quot;: &quot;mise&quot;,

        &quot;miseExecutablePath&quot;: &quot;/opt/homebrew/bin/mise&quot;

    },

    &quot;rubyLsp.customRubyCommand&quot;: &quot;eval \&quot;$(mise env -s fish)\&quot;&quot;,</code></pre></div><p>上記の設定を行うことで、Homebrewなどを通じてインストールしたmiseを使用して、Visual Studio CodeのRuby LSPプラグインを効果的に動作させることが可能です。</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[raspberry piで空気質モニタの作成]]></title>
            <link>https://techamply.com/article/ywb4f4wblt</link>
            <guid isPermaLink="false">https://techamply.com/article/ywb4f4wblt</guid>
            <pubDate>Thu, 18 Apr 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="h8d027c8ed3">はじめに</h2><p>空気中の二酸化炭素の濃度によって集中力に影響ができることを知っていますか？</p><p>今まで触ったことのないラズベリーパイを利用した空気質を測る装置を作る記事を見かけやってみたくなりました。</p><h2 id="h3af2cbe386">準備物</h2><ul><li><a href="https://amzn.asia/d/8B2oQju">Raspberry Pi Zero W</a></li><li><a href="https://mou.sr/3vRWmkG">ANAVI Infrared pHAT</a></li><li><a href="https://amzn.asia/d/9a1MxoB">メモリカード</a></li><li><a href="https://akizukidenshi.com/catalog/g/g116142/">MH-Z19</a></li><li><a href="https://akizukidenshi.com/catalog/g/g108932/">ジャンパーワイヤ</a></li></ul><h2 id="h44e51f96ce">参考資料</h2><p><a href="https://zenn.dev/takuya/articles/079f065ddab7ac">参考記事</a></p><p><a href="https://github.com/AnaviTechnology/anavi-examples">センサーコードサンプル</a></p><p><a href="https://github.com/craftzdog/anavi-phat-sensors-ui">UI</a> </p><h2 id="h868447cfa4">構築手順</h2><p>元記事の手順だと使えないパッケージがあるため pip3を利用してインストールします</p><pre><code>$ sudo apt install python3-pip

$ sudo pip3 install wiringpi</code></pre><p>また、元記事だとC言語で作成していますがパッケージがないためPythonを使用してプログラミングします。</p><p>コードはサンプルにあるのでそちらを利用して出力をjsonに書き換えます</p><p>以下のスクリプト例では、光センサーからデータを読み取り、JSON形式で出力する方法を示しています</p><div data-filename="BH1750.py"><pre><code class="language-python">#!/us#!/usr/bin/python3

import time

import smbus

import json

BH1750_ADDR = 0x23

CMD_READ = 0x10

class BH1750(object):

   def init(self):

       # Rev 2 of Raspberry Pi and all newer use bus 1

       self.bus = smbus.SMBus(1)

   def light(self):

       data = self.bus.read_i2c_block_data(BH1750_ADDR, CMD_READ)

       result = (data[1] + (256 * data[0])) / 1.2

       return format(result,&apos;.0f&apos;) 

         

if name == &quot;__main__&quot;:

    try:

        obj = BH1750()

        data = { &quot;light&quot;: obj.light() }

        json_data = json.dumps(data)

        print(json_data)

    except FileNotFoundError:

        print(&apos;ERROR: Please enable I2C.&apos;)

    except OSError:

        print(&apos;ERROR: I2C device not found. Please check BH1750 wiring.&apos;)

    except:

        print(&apos;ERROR: General unknown error&apos;)</code></pre></div><p>上記のようにprintでの出力をjsonに変更しています</p><p>あとは元記事と同じようにcronを設定を行います</p><pre><code>/5   * /usr/bin/python -m mh_z19                &gt; /home/pi/air-conditioning-monitor/data/MH_Z19.json

/5   * /usr/bin/python /home/pi/air-conditioning-monitor/sensors/HTU21D/HTU21D.py                &gt; /home/pi/air-conditioning-monitor/data/HTU21D.json

/5   * /usr/bin/python /home/pi/air-conditioning-monitor/sensors/BMP180/BMP180.py                &gt; /home/pi/air-conditioning-monitor/data/BMP180.json

/5   * /usr/bin/python /home/pi/air-conditioning-monitor/sensors/BH1750/BH1750.py                &gt; /home/pi/air-conditioning-monitor/data/BH1750.json</code></pre><p>これの設定を行うことで<code>raspberrypi.local</code>にアクセスすることでセンサーの値をブラウザで確認することができます</p><h2 id="ha214098e44">まとめ</h2><p>このシステムが稼働すると、30分から1時間でCO2レベルが1000ppmを超えることがあります。1000ppmを超えると一般に環境が悪化し、仕事のパフォーマンスが低下すると言われています。そのため、定期的な換気が推奨されます。これにより、快適なリモートワーク環境を維持できます。</p><p><a href="https://www.aig.co.jp/sonpo/lp/pp/riskcolumn_202202">参考リンク</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ruby 2.7プロジェクトでVSCodeのRuby-LSP機能を活用するテクニック]]></title>
            <link>https://techamply.com/article/1nig19v1a</link>
            <guid isPermaLink="false">https://techamply.com/article/1nig19v1a</guid>
            <pubDate>Fri, 29 Mar 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="h9707d3a59a">概要</h2><p>本記事では、<code>rubyLsp.bundleGemfile</code>の設定を介して、Ruby 2.7のプロジェクトにおいてもVSCodeのruby-lsp拡張機能を有効にする方法を紹介します。これにより、定義ジャンプやコードフォーマットといった便利な機能をRuby 2.7で利用可能になります。</p><h2 id="he511f54611">Ruby-LSPとは</h2><p>VSCodeで<a href="https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp">ruby-lsp拡張機能</a>を導入することにより、Ruby開発が格段に便利になります。この拡張機能は、定義へのジャンプ、コードフォーマット、リント機能など、開発者の生産性を大幅に向上させる多数の機能を提供します。しかし、これらの機能はRubyのバージョン3.0以上でなければ利用できません。</p><p>Ruby 2.7でのプロジェクトでは、標準ではruby-lspを利用することができません。しかし、<code>rubyLsp.bundleGemfile</code>の設定を適用することで、Ruby 2.7の環境下でもこれらの機能を活用できるようになります。</p><h2 id="h8bb8734b16">設定方法</h2><p><code>rubyLsp.bundleGemfile</code>をRuby 3.0以上をサポートするディレクトリ内のGemfileを指定して設定することにより、Ruby-LSPが動作し、Ruby 2.7のプロジェクトでその機能を利用できるようになります。</p><p>まず、プロジェクトとは無関係なディレクトリにGemfileを作成します。</p><div data-filename="/Users/../ruby-lsp/Gemfile"><pre><code class="language-ruby"># frozen_string_literal: true

source &quot;https://rubygems.org&quot;

gem &quot;ruby-lsp&quot;

gem &quot;rubocop&quot;

# プロジェクト内でRuboCopの拡張を利用している場合、それらのgemを追加

# gem &quot;rubocop-performance&quot;

# gem &quot;rubocop-rspec&quot;</code></pre></div><p></p><p>次に、以下のコマンドを実行してbundle installを行います。</p><pre><code class="language-shell">$ bundle install</code></pre><p></p><p>最後に、VSCodeのsettings.jsonに先ほど作成したGemfileを指定します。</p><div data-filename="settings.json"><pre><code class="language-json">{

  &quot;rubyLsp.bundleGemfile&quot;: &quot;/Users/../ruby-lsp/Gemfile&quot;,

}</code></pre></div><p>これにより、Ruby 2.7のプロジェクトでもVSCodeのruby-lsp拡張機能を活用することが可能になります。RuboCopの設定は、それぞれのプロジェクトに存在するrubocop.ymlファイルに基づいて自動的に読み込まれます。</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[本番環境でSlack通知が機能していなかった時の衝撃体験]]></title>
            <link>https://techamply.com/article/jbxg6i6bzkm</link>
            <guid isPermaLink="false">https://techamply.com/article/jbxg6i6bzkm</guid>
            <pubDate>Thu, 21 Mar 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="hcb9dacb773">結論</h2><p>私たちは、本番環境でSlack通知がSSL証明書の有効期限切れにより機能していないことに気づかず、重要なエラーメッセージを見落としかけていた。幸いにも、この期間に致命的なエラーは発生しておらず、大きなトラブルには至りませんでしたが、この経験はSlack通知に依存せず、定期的にサーバーのログを確認することの重要性を感じました</p><h2 id="hf83196ac67">エラーが発生した経緯</h2><p>新たにデータ作成時にSlack通知を行う機能を実装し、ステージング環境でのテストを経て、問題なく通知が行われることを確認していました。しかし、本番環境にデプロイ後、変更をリアルタイムで監視していた際に500エラーが発生していると報告を受け取りました。</p><h2 id="h4c63846d7d">エラー対応</h2><p>まず最初にサーバーログを確認し、原因究明に乗り出しました。ログの詳細を見ると、Slack通知時に下記のようなSSL証明書の期限切れエラーが発生していることが判明しました。</p><pre><code class="language-shell">/home/appuser/.anyenv/envs/rbenv/versions/3.0.2/lib/ruby/3.0.0/net/protocol.rb:46:in `connect_nonblock&apos;: SSL_connect returned=1 errno=0 state=error: certificate verify failed (certificate has expired) (OpenSSL::SSL::SSLError)</code></pre><p>このエラーメッセージを受けて、私たちは直ちにルート証明書を更新するコマンド<code>sudo yum update ca-certificates</code>を実行し、正常にSlack通知が再開されることを確認しました。</p><h2 id="h46b2949dab">その後の反省</h2><p>エラー対処後、一息ついたその時、Slackへの例外通知機能(<a href="https://github.com/smartinez87/exception_notification">exception_notification</a>)が以前から稼働していなかったことに気がつきました。つまり、前回の通知以降、いかなる例外通知も行われていなかったのです。この事実に気づいた時、背筋に冷たい汗を感じました。約1ヶ月分のログを調査しましたが、幸いなことに特筆すべきエラーは発見されませんでした。</p><h2 id="ha214098e44">まとめ</h2><p>この経験から、「問題が表面化していないから大丈夫」という考えは危険であると痛感しました。システム運用においては、Slack通知のような自動化されたアラートシステムに依存することなく、定期的なログ確認の実施が不可欠であることを再認識しました。</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[honoでマイクロアプリケーションを構築してみた]]></title>
            <link>https://techamply.com/article/k0y565cb93</link>
            <guid isPermaLink="false">https://techamply.com/article/k0y565cb93</guid>
            <pubDate>Thu, 14 Mar 2024 15:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2 id="he2485005d0">目的</h2><p>今回のプロジェクトでは、<a href="https://todoist.com/ja">todoist</a>にGitHubで作成したissueをタスクとして自動的に反映させる機能を実装しました。この統合により、開発プロセスの効率化とタスク管理の自動化を目指しています。</p><h2 id="hcce6a8de97">動機</h2><p>創造の喜び: 何か新しいものを作りたかった</p><p>タスク管理の効率化: 日々、Todoアプリを活用して様々なタスクを管理しており、GitHubのissueとTodoistのタスクを連携させることで、より一元化されたタスク管理を実現したいと考えました。</p><p>既存ツールの限界: 以前は<a href="https://ifttt.com/">IFTTT</a>を使用して同様の連携を試みましたが、不安定な動作と遅延が問題となりました。</p><p>これらの課題を解決するため、自ら手を動かして解決策を開発することに決めました。要件のシンプルさから、サーバーレスアーキテクチャを採用することで迅速かつ効率的な開発を目指しました。選定したプラットフォームは<a href="https://www.cloudflare.com/ja-jp/">cloudflare</a>で、その決定理由は以下の通りです。</p><ul><li>コスト: 無料で利用開始できる。</li><li>デプロイの容易さ: ワンコマンドでのデプロイが可能</li><li>開発環境: TypeScriptでの開発が可能。</li><li>フレームワークの相性: honoとの高い互換性。</li></ul><h3 id="h511b74c536">honoとは何か</h3><p><a href="https://hono.dev/">hono</a>は、日本人開発者によって作られたCloudflare Workersに特化したフレームワークです。その特徴は、軽量でありながら高速で直感的な開発が可能であることにあります。詳細については、こちらの記事が参考になります。</p><h2 id="h03726fb0df">技術スタック</h2><p>本プロジェクトでは以下の技術を採用しました。</p><p>Bun: モダンなJavaScript実行環境。</p><p>TypeScript: 静的型付けを提供するJavaScriptのスーパーセット。</p><p>Hono: 軽量なCloudflare Workers用フレームワーク。</p><p>Wrangler: Cloudflare Workersの開発ツール。</p><h3 id="h5fb56ea386">開発プロセス</h3><p>開発の始め方は非常にシンプルです。以下のコマンドライン操作で環境構築から開発、デプロイまでスムーズに行えます。</p><pre><code># アプリケーションの作成

$ bun create hono my-app

$ cd my-app

# 開発サーバーの起動

$ bun run dev

# デプロイ

$ bun run deploy

# 環境変数の設定

$ wrangler secret put SECRET</code></pre><p>アプリケーションの核となるコードはsrc/index.tsに配置されます。ここでは、簡単なHTTP GETリクエストに対して&quot;Hello 🔥&quot;と応答する最小限の例を示しています。</p><div data-filename="src/index.ts"><pre><code class="language-typescript">import { Hono } from &quot;hono&quot;;

const app = new Hono();

app.get(&quot;/&quot;, (c) =&gt; c.text(&quot;Hello 🔥&quot;));

export default app;</code></pre></div><h2 id="ha214098e44">まとめ</h2><p>Webhookを受け取り、他のAPIを呼び出すようなマイクロアプリケーションには、honoとCloudflareの組み合わせが非常に適していると感じました。このプロジェクトを通じて、サーバーレスアーキテクチャの利点を実感し、開発の柔軟性と効率を高めることができました。</p><p></p>]]></content:encoded>
        </item>
    </channel>
</rss>