次のDeveloper Spotlightは私のもう一つのお気に入りです。今日はJacob Hands氏の投稿です。Jacob氏は生鮮品である肉のオンラインストアTriTails Premium Beefを経営しています。そのため、彼は出荷に関する独特の問題を多く抱えています。ショップの成長に対応するため、開発者であるJacob氏は、多くのワークフローを自動化するためにAirtableおよびCloudflare Workersに頼っています。
Jacobの次の言葉は私のお気に入りの1つです。
「確かに、Cloudflare Workersを使用すると1日当たり数十億ものリクエストを計量することができます。でもそれが1日当たり数百のリクエストだとしてもすごいことです。」
ここでJacob氏は、AirtableとWorkersを統合して完全なカスタマイズワークフローツールを一つにまとめるのに、数日しか掛からなかった経緯について話しています。そして、それにより毎日何時間も節約できることも説明します。
出荷要件
生鮮品を出荷する新しい電子商取引ビジネスでは、業務が拡大するにつれ、いくつかの課題が生じます。最大の課題の一つは毎日の出荷能力が限られていることです。その原因の一部は、作業空間が小さいため同時に注文を梱包することができる従業員数が限られることです。また、UPS宅配便に指定した集荷時間があったとしても、配送業者が出発する前に、梱包担当者が手を休め慌てて対応する必要があります。また、梱包はテトリスゲームのようで、全ての商品を冷凍状態に保つために、必要な量のドライアイスと一緒に詰める必要があり、時間が掛かります。
レギュラーボックスは次のようなものです。
お客様の玄関先に到着した時の製品の冷凍状態を確実に保つためには、輸送時間をできるだけ短くする必要があります。この要求があるため、週末には荷物が輸送されないようにする必要があります。配送が1日遅れたことで、私たちは、それを身をもって知ったのです。このこと自体はそれほど悪くはありませんが、これによってそのパッケージは週末の間仕分けセンターに置かれることになり、これは困ったことでした。
幸いなことに、時間までにそれを見つけ、夜を徹してステーキセットの交換品を送り、ディナーパーティーに間に合わせることができました。ただしその後、私たちは正しいパッケージが適切な時間に配送されるように、注文の選別を始めました。
注文の選別、苦労
初期の頃は、昼食後に注文をまとめて1時間で完了することができましたが、業務が拡大するにつれ、何を、いつ、そしてどのように配送するかに注意する必要が生じてきました。まず、未出荷の注文すべてをGoogleスプレッドシートにコピーします。次に、各注文の配送時間を手作業で確認してスプレッドシートに追加します。次にそのスプレッドシートは配送時間で並び替えられ(支払優先の航空便を一番上に)、一連の注文はグループに分類します。最後に、梱包チームの作業のためにGoogleスプレッドシートを印刷していました。
輸送に掛かる時間は出荷プロセスにとって非常に重要です。梱包チームが注文ごとに必要なドライアイスと梱包材料の量を把握するために、梱包票に記載する必要があります。そのため、梱包票を印刷する前に、移動に掛かる時間をAdobe Acrobatに入力しました。これは非常に面倒なプロセスですが、各商品を良好な状態で配達するために必要なものに応じた梱包をするためには不可欠でした。
梱包チームによる注文の梱包が終了すると、梱包担当者が入力したワークシートに基づき、箱の重量とサイズがGoogleスプレッドシートに追加します。次に、各注文ラベルを作成します。私たちがプロバイダーとの物流管理で使用するアプリケーションであるShipStationに、各重量とサイズがGoogleスプレッドシートからコピーします。最後に、荷物が集荷され、お客様の玄関までの旅を開始していました。
このプロセスは10の注文に対してはうまくいきましたが、事業が拡大するにつれ、注文の選別と整理はフルタイムの仕事になりました。すべて正確に入力されているかの確認と再確認を実施し、人的ミスが発生しないようにします(実は、まだ発生しています!)。
自動化
まず、私は最も面倒な手順である、配送時間の計算を自動化したいと考えました。このプロセスには時間が掛かり、そのせいで梱包チームは注文の梱包をなかなか開始できなかったため、私たちの処理能力がさらに限られたものになっていました。Cloudflare Workersは簡単に使用できすぐに実行できるため、そこから開始するのが良いと感じました。その計画とは、Googleスプレッドシートで=IMPORTDATA(order)を使用して、その手順をプロセス内から排除することでした。
たった1つのことを自動化するだけで効果が表れ、私たちのワークフローをさらに改善するアイデアが次々に生まれました。毎日の最初の30分の作業を自動化した後は、他に何ができるでしょうか?私は可能な限り多くのワークフローを自動化しようとしたとき、その可能性に興奮しました。
選別の選別
多くの場合、問題解決とは何を優先するかを判断することであり、このワークフローの自動化も例外ではありません。私たちの注文選別プロセスには多くの手順があり、それを処理する時間が制限されていたため、すべてのことを一度に自動化すること不可能でした。その代わり、一回につき一つの手順、最も優先順位の高い問題のみを解決することにしました。選別を選別するプロセスは、無理なくワークフロー全体の自動化に必要な全てを構築し、そこに至る各手順を効率化するのに役立ちました。
輸送時間の計算のAPIが機能しているため、次に自動化した部分は、毎回コピーと貼り付けるのではなく、APIを使用して、Shopifyから出荷する必要がある注文を取得することでした。ここにきて、Googleスプレッドシートの限界が明らかになり始めました。スプレッドシートでも自動化することはできましたが、すぐにハッキングされやすいブラックボックスになる可能性があります。そのため、より優れたプラットフォームに移行する段階になりました。でもどのプラットフォームが優れているでしょうか?
Airtableが2012年にリリースされてから頻繁にその噂を耳にし、何度か試してみたことはありましたが、その価格と制限のために私の使用事例には合わないと感じていました。ただし、毎回保存する必要があるデータは少量であったため、その使いやすいAPIと、スプレッドシートでは難しい厳格なセル形式をサポートしているので、試す価値があるように感じました。AirtableのUIは直感的に使用でき、必要なデータのタイプごとにカスタムフィールドを簡単に作成することができます。
Airtableに組み込みScriptingアプリがあることを知ってから、これが自分のジョブに最適なツールであることが明白になりました。
Airtable Scriptingアプリの作成
Airtable ScriptingはJavaScriptを使用してAirtable内から機能を直接作成するための強力なツールです。残念ながら、一部の制限があります。例えば、コピーと貼り付けを使用せずに、Scriptingアプリの異なるインスタンス間でコードを共有することができません。また、ソース制御がないため、変更内容を元に戻すにはUndoボタンに頼ることになります。
一方、Cloudflare Workersは完全な開発者用プラットフォームです。ソース制御を簡単に使用することができ、WranglerおよびMiniflareを使用した優れた開発者エクスペリエンスがあるため、テストとデプロイが高速かつシームレスです。
Airtable ScriptingとCloudflare Workersは美しく連携します。Workers上にAPIを作成すると、より複雑なタスクをCloudflareネットワーク上で実行することができます。次にこれらのAPIはAirtableスクリプトによってフェッチされ、コード共有に関する問題が解決され、開発速度が向上します。
Shopifyの注文のインポート
まず、ShopifyからAirtableに注文をインポートする必要がありました。Workersで私が作成したAPIエンドポイントは、未処理のすべての注文を調べ、今週どの注文を出荷する必要があるか判断します。次に、注文はWorkers Cache APIでキャッシュされるため、Shopify APIの制限に関係なく、必要なだけこのエンドポイントを必リクエストすることができます。
そこから、Airtable Scriptingアプリは、Shippo (複数業者の出荷API)を呼び出して配送業者の輸送時間予測を取得する私たちのWorkers APIを使用して、注文ごとの輸送時間を確認します。最後に、Airtable内の各行はそれぞれの輸送時間によって更新され、自動的に優先度の高い有料航空便を一番上に、それに続いて輸送時間が長いものから短いものに並び替えられます。
完全に手作業のプロセスでは45分だった注文順リストの取得作業が、ボタンをクリックするだけでAirtableとWorkersによって数秒でできるようになったのは、これまでのプログラミング経験の中で最も「ひらめいた」瞬間でした。
梱包票を順番に印刷する
次に取り組んだ大きな課題は梱包票の印刷でした。それらは時間順ではなく選別順に印刷する必要があります。そのためには各注文を手作業で検索する必要がありましたが、今ではAirtable内のボタンで、一群の入力済み注文を検索するShopifyへのリンクを生成することができます。
注文ワークシートの印刷
もちろん、そこで止めることなどできませんでした。
梱包された注文を追跡するために、すべての注文が一覧表示され、各注文のボックスサイズと重量が列に記入された、印刷済みのスプレッドシートを使用します。残念ながら、Airtableには表の印刷をカスタマイズするための良い方法がありません。
皮肉なことに、このせいでGoogleスプレッドシートに戻ることになりました!スプレッドシートは表のフォーマットを作成する最も簡単な手段なので、最良の選択に思えました。しかし、Airtableからスプレッドシートへのデータコピーは面倒です。代わりに、Airtableからデータを取得して、それを印刷時の確認の際に必要なCSV形式にフォーマットする、APIエンドポイントをWorkersで作成しました。スプレッドシートから、IMPORTDATA関数によって開いたときに一日の注文が自動的にインポートされ、印刷の準備ができます。
ShipStationへの梱包詳細内容の送信
梱包チームが梱包を終了して出荷ワークシートに入力すると、各注文のボックスサイズと重量がAirtableに入力されます。また、これらの詳細をShipStationに入力する代わりに、ShipStation APIを使用して重量とサイズを設定するため、Workers APIでエンドポイントを作成しました。ShipStationの注文の更新は注文のIDに基づき実行されます。スクリプトでは、最初に未処理の注文すべてを開いてから、すべての未処理の注文の注文名とIDマッピングをWorkers KVに書き出すことにより、それ以降のこのAPIへのリクエストでは、動作が遅くて厳格な制限があるShipStation list APIを回避することができます。
次に、ボックスごとの詳細をこのAPIに送信するための別のAirtableスクリプトを作成しました。重量とサイズの設定に加え、注文には日付がタグ付けられているため、ShipStationでどの注文がラベル作成の準備ができているかを容易に識別することができます。最後に、ShipStationでラベルがまとめて作成および印刷され、それぞれのパッケージに貼り付けられます。
すべてを一つにまとめる
システム全体の概要は次のようになります。AirtableおよびAirtableと接続されたすべてのクライアントは、すべてのサードパーティーAPI間を接続および連携させる、Worker APIを呼び出します。
WorkersおよびAirtableが共に機能する理由
このワークフロー全体をAirtableで作成することもできたかもしれませんが、Workersを統合することにより、Airtableスクリプト間および他のプラットフォームの両方でコードを作成、テスト、再利用するプロセスははるかに簡単になりました。
開発エクスペリエンス
Airtable Scriptingアプリを使用すると、標準的なエディターと自動補完を使用して、Airtableに格納されたデータを使用するスクリプトを素早く簡単に作成することができますが、より複雑なスクリプトの作成は困難です。
このプロジェクトで面白いのは、遅延とスケーリングが重要でなかったことです。ただし、Cloudflare Workersによって開発とテストは信じられないほど簡単になります。過度の設定またはデプロイのパイプラインはありません。
信頼性とセキュリティ
私たちはビジネスを運営していますから、サーバーのおもりをしなければならないことは、非常に気が散る、できればしたくない作業です。Workersは完全にサーバーレスなので、サーバーがダウンしたために何かが中断することを心配する必要がありません。
また、Cloudflareですべてのサードパーティーシステムにアクセスする必要がある機密情報すべてを、秘密の環境変数を使用して安全に格納することができます。これらのトークンおよびキーは、すべて完全に暗号化されセキュアになります。
Airtableは優れたデータベースとUIを一つにまとめたものです
データ入力と表示に関するUIを作成するためには多くの時間とリソースが必要です。Airtableを活用して、私はフロントエンドフレームワークはもちろん、HTMLにも全く触れずにワークシート全体を作成しました。それにより、コアとなるビジネスロジックのみに集中することができました。Airtableのダッシュボード機能でも、搬送されるパッケージの種類の高レベルの概要を含むレポートを作成することができ、将来必要な梱包用品の予測に役立っています。
カスタムスクリプトを作成する場合にスプレッドシートでワークフローを作成するのはまるでハッキングのようですが、Airtableの場合は正反対です。拡張性と優れたUXを備えているおかげでAirtableは将来を見据えた優れたツールになりました。
今後の改善
基本的な内容を扱ったところで、私はこのセットアップに関する最大の利点の1つに気付きました。それは、機能の追加がいかに簡単かということです。改善の余地があるワークフローの小さな問題に気付き始めました。例えば、注文がが複数のパッケージに分割されるときは、Airtableの行を複製して各注文の注文番号に添え字を加える必要があります。注文分割の自動化は優先順位が高くありませんでしたが、すぐにプロセスの中で最も時間がかかる部分の1つになりました。30分後には、各行に他のAirbableスクリプトで作成された「分割注文」ボタンが追加されました。
もう一つの問題は、お客様が水曜日に不在の場合、注文が月曜日に出荷されると、玄関に放置されて腐ってしまうことです。ありがたいことに、出荷可能な注文を取得するWorkers APIに、オプションの最短出荷日タグを素早く簡単に追加することができました。現在では、営業チームがお客様の不在時に最短出荷日のタグを追加すれば、残りのワークフローが自動的にそれを考慮して出荷するものを決定してくれます。
まとめ
驚異的なパフォーマンスが得られるため、多くの商取引ではWorkersを求めて、数百万または数十億ものリクエストにまで拡大しつつありますが、毎日新たに数百のWorkersリクエストがもたらす価値では満足できませんでした。
Cloudflare Workersは、特にAirtableなどのツールと組合せると、ユーザーの正確な仕様に基づく独自の内部ツールを非常に簡単に作成することができます。これにより、さらに多くの業務に対してこの機能を提供することができます。
CloudflareはFormagrid, Inc., dba Airtableとは提携しておりません。このブログ投稿で述べられた見解および意見は単にゲスト著者によるものであり、Cloudflare, Incの見解を表すものではありません。