Node.jsでCSV (RFC4180) をparseするのに苦労した

単純に1行分のレコードを Array<String> に変換してくれればよかっただけなのに、簡単に使えるライブラリになかなか当たらなくて難儀した。これを使えばよかった。

www.npmjs.com

const CSV = require('comma-separated-values');
const fs = require('fs');

const data = fs.readFileSync('test.csv', 'utf8');

const csv = CSV.parse(data, {
    cast: false
});
console.log(csv);

castオプションをfalseにしておかないと、無駄な変換が入ってしまう。

以下、RFC4180が処理できなかったやつ。これらは "" でクォートしてたりしてなかったりする列が混在していると解釈できないようだ。使い方が間違っていただけの可能性もあるが、そもそも高機能である必要がない(例えばヘッダ行をもとにKeyValueに変換してしまう機能なんか要らない)ので、要件が合わなかった。

www.npmjs.com

www.npmjs.com

ソフトウェアの会社は創業補助金に応募してはいけない

タイトルが結論である。

創業補助金なんてものに時間かけるぐらいなら、受託やってる方がマシ。私はこれに採択されてしまったがために、多くの時間を無駄にした。

ここから先は読む価値がない。

創業補助金とは

ざっくりいうと、

  • 創業前~創業1年未満の法人が、
  • 補助金の対象期間(半年から9か月程度)に発生した
  • 補助対象と認められる経費に対して2/3~1/3までを補助金として支給(上限額は50万円~300万円程度)

補助金として受け取れる制度である。ちなみに国が去年行っていた補助金は「地域創造的起業補助金」という名前だったようだ。

名前の通り、創業・起業を促す補助金であるが、どちらかというと、国および自治体が補助金という担保を付けることで、金融機関が創業間もない会社に対して数百万円程度の創業時融資をしやすくすることのが真の目的だと理解している。

今年度は消費増税対策に予算が回されているのか、国予算の同様の補助金は募集がないようだが、地方自治体でほぼ同様にスキームの補助金は相変わらずあるようだ。

www.cs-kigyou.jp

www.tokyo-kosha.or.jp

創業補助金と私

2013年に採択されて、200万円の補助金を受けた。2019年9月でやっと最後の事業報告完了した。

創業補助金の大まかなスケジュール

  • だいたい毎年2月~7月頃に告知され、2か月程度の応募期間がある
  • 書類検査を経て、募集終了から2か月後ぐらいで採択事業者が決定する
  • 採択決定から即座に補助金対象期間が開始し、半年~9か月程度先までが補助金の対象期間となる
  • 補助金の期間終了後、1か月以内に事業報告書(補助金の申請書)を作成して提出
  • 書類不備等がなければ、2-3か月後に補助金が振り込まれる
  • 補助金支給から、5年間(決算期5回)は事業報告書等を提出する義務がある

察しが良い人であれば、「5年間拘束される」という記述から相当不穏さを感じるはずである。

創業補助金の告知があるまで

創業補助金は「毎年だいたいある」のだが、告知されるまで応募期間・応募条件・補助率などが全く分からない上、そもそも補助金自体がないかもしれない。実際、今年は補助金自体がない年だった。

創業補助金を狙っていく場合、たぶん募集がかかるだろうという憶測をもとに、だいたい年末~初夏ぐらいまで、中小企業庁のサイトをチェックすることがデイリークエストになってしまう。カネがかかっているし、出遅れると時間的猶予がなくなって不利になってしまうため、仕方がない。

常にワーキングメモリの一部を占有されてしまうし、毎日5分とか10分とか無駄な時間をつかってしまうことになる。

また、これは非常に重要だが、創業補助金は創業にかかる補助金なので、告知を待っている時点で起業してはいけない。補助金の対象から外れてしまう可能性がゼロではない。

募集要項の確認

創業補助金の告知が出ると、まずは募集要項の冊子を読むことになる。お役所言葉でだいたい40ページ前後書かれているので、読むのに1-2日ぐらいかかる。

まずは募集対象者を確認して、自分が補助金の対象に含まれているを確認する。無事に対象に含まれていれば、補助金額と対象経費の確認を行う。創業補助金では、

  • 社員の人件費
    • 交通費や住宅手当等の各種手当を対象経費にするには社内規則(≒就業規則)で支給ルールが明文化されている必要がある。
    • 役員報酬は一切対象にならない。
  • オフィス賃料
    • 多少の条件設定はあるが、これは比較的素直に経費対象となる。
    • ただし、自宅の一部をオフィスにするとか、知人の会社のオフィスを間借りするようなケースでは、補助金申請時に相応の書類を用意する必要があり、非常にめんどくさい。
  • 設備費
    • これはソフトウェアの会社の場合は「まったく対象とならない」という前提で考えた方が良い。後述内容を読めば、普通は経費にはしたくなくなる。
    • 開発PCが経費として認められることはまずない。
    • 高価すぎる什器(アーロンチェアとか)も経費と認められない可能性が高い。そもそもリースにしろというようなことが書いてある。
  • 原材料費
    • ソフトウェアの会社にはそんなものはない。
  • 特許等の知財関連経費
    • 基本的に弁理士等への相談料のみが補助対象となる。出願にかかる手数料等は対象にならない事の方が多い。
  • 広告費・マーケティング
    • これも比較的取りやすい経費。ノベルティや謝礼が経費とは認められない程度。
  • 旅費
    • 経費算定ルールがくそ細かい。申請の手間を考えると、最初からないものと考えた方がよい。
  • 外注費・委託費
    • これもめんどくさい。後述する。

あたりが経費対象として認められるというようなことが書いてある。

正直、冊子を読むだけではわからないし、わかったつもりになってしまうとヤバいので、補助金についての説明会に出席しなければならない。参加登録を行って、説明会で話を一通り聞いてから、個別質問があるのだが、ここが本番である。

説明会では冊子に書いてある範囲のことしか説明がないので、どこがアウトと判定されるのか自分で質問して確認する必要がある。質問をすると明確にアウトのケースではアウトだと回答がくるが、グレーゾーンについては全て「実際に経費審査を行う時期にならないと、上からの通達が下りてこないし、ケースバイケースになるのでわからないんですよ~」というゴミのような回答が得られる。こちらが質問をしている相手は、エスポワール演説時の利根川みたいなもんだと思い知ることとなる。

今となっては、私は既に創業補助金を経験した、エスポワールで言うところの船井みたいなポジションになっているので、経費類について補足すると、「どれだけ手間がかかろうが、相見積もりが取れるものは、すべて相見積もりを行う」必要がある。 *1

  • 相見積もりの時の書類はファイリングし、最終的になぜ選定したかの理由も書類として残す必要がある。
  • 相見積もりが不可能なケースは、なぜ相見積もりが不可能なのか第三者が読んで理解できるような書類を残す必要がある。
  • Amazon等のネットで買ったものは相見積もりしたことにならないと判定される可能性が高いので、リアル店舗で見積もり依頼をしてから購入する。
    • 説明会の時点では「同様の製品を比較したことがわかるようにスクショを取れ」と説明を受けたが、補助金申請時に「そう説明があっただろ」「こんなものは相見積もりにならない」と2時間ぐらい押し問答になった挙句、国の事務局へ質問転送となったが、結局経費と認められなかった。

応募

募集要項を読んで、自分が対象者であり、十分に補助金を受けられるなという判断が付いたら、いよいよ応募書類を書く。

もしまだ事業計画自体を作っていないようであれば、急いで作ることになる。これ自体は創業補助金は関係なしに、会社を作るのであれば程度はともあれ作るべきなので、素直に作る。ただ、創業補助金は採択率が3割程度しかないので、採択させるように新規性や社会的意義みたいなものを盛っていく必要があり、書き上げるのに相当時間がかかる。

事業計画を書くだけでは応募書類としては不足があるので、予算計画を書く必要がある。人件費はともかく、何か購入したり社外に発注するような場合は、いちいち目的を添えて、代金の相場を調べて書いていく必要がある。これも地味に時間がかかる。

また、創業補助金に合わせて銀行等から融資を受ける場合(現行制度の創業補助金では、融資ありだと支給上限額が大幅に増える)、銀行にアポを取って融資の約束を取り付けなくてはならない。創業補助金の応募書類は所詮応募書類なので、銀行に説明するための事業計画書の作成が別途必要となる。

私の場合は、銀行周り2件目で何とか融資の約束が取れた。1件目の銀行については「認定支援機関」と書かれていたにも拘らず、実際にアポを取って訪問したら、こちらの説明をほとんど聞かずに「うちはこういう小額の融資は行っていない」「認定支援機関は対外的なものがあってやっているだけ」という趣旨の話をされて、応対実績だけ作って門前払いをされた。どこの銀行とは言わないが、「あなたも私もオッケーバンクとは今後絶対に取引しないぞ」と強く思いながら帰宅したものである。

2件目の銀行については、まともな応対をされたが、書類チェックで何度か修正を繰り返すことになり、リードタイムでは2週間程度かかった。

最終的に応募に至るまでで実働で1か月以上はかかってしまった。この間、他のことはほぼ何もできなかった。提出も締切ギリギリになってしまった。創業補助金の準備以前に事業計画自体は作ってあってこれなので、告知されてから事業計画をゼロから作るというのでは、まず応募は間に合わない。

採択決定~補助金の申請

創業補助金が採択されると、通知書類が郵送されてきた。これが到着すると、いきなり補助金の対象期間が始まる。

補助対象の期間以前に購入したり契約したものは補助対象経費とならないので、創業補助金の応募から採択結果が通知されてくるまで、補助対象になりそうなものは一切購入できない。事業が進められないのとほぼ同等なので、事業が停滞する。創業支援とは一体なんだったのか。

前述したとおり、ほぼ全ての事項で相見積もりが必要となるため、1つ購入するのに1-2日程度の労力が必要となってしまう。Amazon等が実質使えないので、ネット通販より高くなることも度々発生するのだが、実際にかかるコストよりも手続きが重要なので、ダメなものはダメである。

もし設備を購入した場合は、設備管理番号を採番し、ラベルシール等で設備に張り付け、備品管理台帳へ記入しなくてはならない。領収書・納品書をコピーし、見積書等と合わせて紙でファイリングしていく。申請事務局側の手間をできるだけかからないようにするため、見出しや中表紙等をつけて見やすくファイリングしなくてはならない。これが出来ていないと、申請自体が却下される可能性がある。実際、読みづらいことを理由の一つとしてリジェクトを受けたので、中表紙にインデックスシールを付けたりした。

ファイリング作業のために穴あけパンチを買ったのだが、この穴あけパンチは創業から7期目に突入した今でも、創業補助金の手続きでしか使ったことがない。

申請は、中間報告と最終報告(補助金申請)の2回が必要となる。中間報告は面倒は面倒だが、正直大したことないので、割愛する。

最終報告は、決算書とは全く異なる補助金独自の方法で売上や経費類の集計を行い、独自のWord/Excelフォーマットに従い作成しなければならない。同じ数字の2度打ち3度打ちも当たり前で、かなりの苦痛が生じる。

私の場合、最終報告書を作るのために実働2週間弱はかかった。前述の通りだが、報告書が読みづらいことと、ネット通販で購入した設備が全部不可にされた影響で、再提出となっている。

補助金の振込

最終報告と補助金申請を行ってから2か月後に銀行口座に振り込みがあった。ここについては特になし。

5~6年の報告義務

創業補助金は、補助金が振り込まれたら終わりではない。先5年間(5回)は決算の度に事業報告を出さなくてはいけない。これも決算書とは異なる独自フォーマット・独自計算式で記載する必要がある。だいたい半日~1日程度かかる。

また、採択決定~最終の事業報告が完了する前の間、事務所を移転したり、創業補助金で購入した設備を廃棄したり、事業自体を畳んで廃業する場合に都度書類を提出しなくてはならない。幸いなことに設備経費が認められなかったことで、この申請は事務所移転の1回だけで済んだのだが、これもかなり面倒である。

まとめ

創業補助金について、入金があってから1年ほどは割合好意的にだったが、時間を追うほどに時間の無駄だったなという感情になってきている。現在はタイトルに書いた通りである。たかだか200万円を得るためにかけるべき労力ではなかった。

過去の自分が割と好意的であったのは、申し込み前後の2012-2013年頃の名古屋は、まだリーマンショックの影響が強く残っていた。

受託案件自体はあるものの、一度下がり切った単価が下がったままになっており、下っ端クラスのプログラマーでは月40万円~60万円前半、アーキテクトと名乗っても問題がないような上位クラスでも月70万円~80万円が上限というような惨状になっていた。リモートワークもほぼ普及しておらず、持ち帰り案件自体もかなり限られていた。この状況での200万円は実働3ヶ月程度に相当するため、事業計画を立ててマネーを得るという考え方もできなくはなかった。

ただ、その後はかなり人手不足が進行し、現在は下っ端クラスのプログラマーでも月50万円-70万円台は取っていけるし、上位クラスの人間がちゃんと案件を選定すれば月に100万円200万円は当たり前の状況になっている。こうなってくると、多大な労力と事業展開の制約を受けてまで得る200万円の価値は、ほぼゼロに近づいてしまう。

という事で、後から答え合わせをすると、創業補助金を取ったのは間違いで、どうしても創業時資金が欲しいのであれば、政策金融公庫から創業融資を受けるべきである。創業補助金と違って、融資の際の事業計画書を作成するだけでよい。今の金利だと、無担保で融資を受けたとして、300万円を3年で返すようなケースでの支払い金利は15万円もないし、500万円を5年でも35万円ぐらいだと思う。金利を支払うために必要な稼働は何か月分ですかね?

*1:ブコメ読んでたら初稿ではミスリードを生む表現だったので、この1文は後から修正した

PowerShellの色設定

VS Code標準の統合シェルがPowerShellなのだけど、ハイフン引数の色の視認性が悪すぎるので設定した。しばらく設定方法がわからなかったのだけど、PowerShell側の設定を変更して解決した。

プロファイルの作成

New-Item -Path $Profile -ItemType file -force

プロファイルのパスを確認

$profile

プロファイルをエディタで開いて、人間の目では読めないような色の設定を変更

Set-PSReadLineOption -Colors @{
    "Parameter" = [ConsoleColor]::Cyan
    "Operator" = [ConsoleColor]::Gray
}

マニュアルを見る限り、RGB値の設定も可能なようだ。

docs.microsoft.com

GitHub-readyな社労士 @Takashi_U に就業規則の改定を依頼した

デンキヤギという会社では、就業規則GitHubで公開・管理しています。

github.com

就業規則というものは一回作れば終わりというものではなく、法改正や、運用後に気が付いた改善・考慮漏れに対応して、都度改定していく必要があります。ただし、改定するにも労働関連法やガイドライン等を逸脱しないようにする必要があるため、社労士のチェックが必要不可欠となります。

就業規則の初版を作成した際の流れは GitHubに会社の就業規則を公開した - terurouメモ でも書いていますが、名古屋市の中小企業向けの専門家派遣(同様の仕組みで中小企業庁 ミラサポにも専門家派遣がある)を使って作成しました。この時は、

  1. 私が全部markdownで執筆して、
  2. 印刷して、
  3. 社労士に紙でレビューしてもらって、
  4. フィードバック事項をmarkdownに反映する
  5. 2-4を繰り返し、レビューOKになったら完了

というフローで回していて、正直かなりの苦行でした。

このフローを改定の度に回していたら消耗し続ける未来しかありません。GitHubで公開している以上はGitHub上で改定作業を行いたいし、打合せもオンラインで全て済ませたいというのは至極当然の発想となります。幸いにもGitHubに対応できる社労士 (@Takashi_U) の存在に心当たりがあり、就業規則も改定したい内容がたまってきていたので、改定作業を依頼してみることにしました。

蛇足ですが、なんで事前に認識していたかというと、2014年にGitHub就業規則を公開した時に、Twitterで「この記載で大丈夫?」という旨のDMを送ってきた社労士が @Takashi_U でした。

プロフィール追っていったら、既にGitHubアカウントを持っていたり、Rubyを書いている気配があったりというのが見えてきたので、「オッ、これはヤバい人間だな」と認識した流れになります。Twitterで雑にメンションやDMを飛ばす行為は仕事に繋がりますね。

発注から改定までの大まかな流れ

  1. Twitterで「就業規則改定したいんだけど」とDMを送る。
  2. Twiter DM上で、費用について認識合わせと大まかな方針決める。
  3. 改定作業はGitHubにIssueを立てて、ドラフトをプルリクエストで投げてもらう。メインの議論はGitHub Issue上で行うが、たまにTwitter DMでやり取りしたり、Discordでのボイスチャットも併用する。
  4. 改定内容が確定したら、施行日を設定して、masterへマージする。
  5. 全ての作業が完了したら、請求書を送付してもらって支払いをする。

ドラフトがほぼ固まった段階など、都度社内チャットに状況を流して社員にもチェックをしてもらうようにしていました。

就業規則の改定(2018年末) · Issue #23 · DenkiYagi/EmployeeHandbook · GitHub が直近の改定対象となったIssueです。GitHub上でソフトウェア開発するフローとなんら変わりのない使い方をしています。 就業規則がマイナンバー対応になっていない · Issue #17 · DenkiYagi/EmployeeHandbook · GitHub にログ残っているように「Issueの粒度が大きすぎるから分割してくれ」と社労士からツッコまれたりとかもしています。

今回の作業期間は、依頼してから大まかに半年ぐらいかかっていて、施行は2回に分割して出しています。半年かかったのは、こちらが特に急いでいる訳ではなく、あまり催促もしなかったので、結果的にこうなっただけです。最初の打ち合わせ時に期限を明確にしてやれば、もっと短期間でできるのではないかと思います。

まとめ

ITの会社は @Takashi_U労務関連の仕事をどんどん依頼していきましょう。

顧客企業の求人情報から受託システム開発契約の単価を決める話(フリーランス・零細企業向け)

準委任契約でシステム開発を受託する際の契約単価、どう決めてますか?

相場といわれる額とか、過去の自分の実績額とか、もしくは自分の生活必要な年収からの逆算とか、勘や経験や度胸に近いもので決めてる人が大半なんじゃなかろうかと思います。ただ、それだけだと単価交渉する際に弱いんで、一例としてそれっぽい算出式を書いてみます。

フリーランスや零細企業が、いわゆる事業会社と直接契約するようなケースと考えてもらえばいいです。

算出式

(顧客企業の給与年額 × (1 + 休暇/残業係数 + 福利厚生係数 + 利益/リスク係数) + 受託側の一人当たりの年間経費)

これで年額が出るので、月額単価の場合は 12 で割って、時間単価の場合は 1920 (160h×12)で割ってください。顧客企業側の1日の基準労働時間が8hではなく、7.5hとか6hだったりする場合もあるので、その場合の時間単価の計算は適時修正してください。

なお、この計算式で算出された金額は、消費税は含まない税抜価格です。

顧客企業の給与年額

顧客企業の求人ページや転職者向けの口コミサイト等で、「もし正社員として採用された場合の」給与レンジや平均給与額等を調査します。賞与、住宅手当/家族手当等の各種手当や交通費等も全て含めた額面給与です。

これが一番重要な作業です。エンジニアにカネを払う気がない企業(もしくは単純にカネのない企業)がここから判定できます。カネを払う気がなければ、必然的に社員の給与額も下がり、外部委託業者への支払いも渋くなります。

当然、すべての情報が開示されているわけではないので、あくまで推定になります。雑にやると、求人ページに記載されている想定年収に、交通費等の30-40万円を足した金額で考えればいいかなと思います。

休暇/残業係数

いわゆる有給休暇の分を割増します。顧客企業の正社員には有給休暇があります。仮に有給休暇が20日ある場合は、年間に実際に労働しているのは12か月分ではなく11か月分です。受託側はこれを加味して金額を補正しないと、この分は無償奉仕してるのと同じ状態になります。

有給20日の場合、係数として 9-10% (12÷11-1=9.09%) ぐらいで考えます。

もし、残業(超過労働・深夜労働)が恒常的に発生することが見込まれる場合、正社員であれば割増賃金を払う必要があるため、当然その分を割増します。簡易的に残業割増率を50%として、月に20時間ぐらい発生が見込まれる場合は、6-7% (20÷160×0.5 = 6.25%) ぐらいは更に割増する必要があります。

福利厚生係数

社員を雇う場合、企業側には、法定内福利費(社保+厚生年金)、法定外福利費(スポーツジム補助とか飲み会補助とか)、採用教育費がかかります。これも当然加味します。

会社経営において、額面給与額の2-3割 が会社負担の福利厚生費の目安額といわれるので、30% を係数として採用します。

この係数はよほど特殊なことをやっている会社でない限りは大して変わりません。無料の社食をやっていたりとかするケースもありますが、社食とかは完全にスケールメリットが効く領域なので、係数が変わるほどの影響はありません。

利益/リスク係数

正社員には解雇規制がありますが、外部委託する場合にはそんな法規制はありません。様々な要因で急な契約解除が出るリスクがあります。このリスク分を割増請求する必要があります。また、フリーランス・法人共に売上が上がれば所得税がかかるし、住民税もかかるので、それも加味して利益を確保する必要があります(ちなみにこの一連の計算をするは消費税は含まないようにしてください)。

ここはかなり幅が出る係数で、長期契約が見込まれる場合は係数を低めにしてもOKで、急に契約解除される可能性が高い場合は係数を高くする必要があります。

私個人の考え方としては、この係数の最低値は 20-25% と考えています。契約解除保証料(正社員に対する解雇補償金)が年額に対して約2.5-3.0か月分に設定していると考えればよいです。リスクが非常に高い場合は 50% ぐらいに設定しても妥当な数値かと思います。

受託側の一人当たりの年間経費

会計でいうところの、一人当たりの器具備品費+販管費です。この項目は係数ではなく固定額となります。

オフィス賃料や電気代とかの固定費や、PC購入代やGitHub税やAdobe税やVisualStudio税とかも含めて考えます。経理や営業等の実働コストも含めます。フリーランスの場合、決算を自前でやっちゃってる人もいると思いますが、それも金額ベースに落とします。

私の感覚では、フリーランスから零細企業ぐらいだと、80-150万円ぐらいかかっている(年度計画時の予算として計上してる)かなぁという認識です。

試算

  • 休暇/残業係数 : 10% (有給20日、稀に残業があるかも)
  • 福利厚生係数 : 30%
  • 利益/リスク係数 : 25% (急な契約解除が発生する可能性は低め)
  • 受託側の一人当たりの年間経費 : 100万円

このようなリスクを低めにした想定で、顧客企業の給与年額を変化させていくと、

  • 想定年収 500万円 -> 年商925万円(77.0万円/月)
  • 想定年収 600万円 -> 年商1090万円(90.8万円/月)
  • 想定年収 700万円 -> 年商1255万円(104.5万円/月)
  • 想定年収 800万円 -> 年商1420万円(118.3万円/月)
  • 想定年収 900万円 -> 年商1585万円(132.0万円/月)
  • 想定年収 1000万円 -> 年商1750万円(145.8万円/月)
  • 想定年収 1100万円 -> 年商1915万円(159.5万円/月)
  • 想定年収 1200万円 -> 年商2080万円(173.3万円/月)

みたいな感じになります。繰り返しですが、顧客企業側の想定年収は交通費も含んだ額面だということと、年商の方は税別価格なので注意してください。

最近は東京23区内だと月単価の下限値で80万円を超えてきているという相場実態から考えても、こんなもんかなという感じがします。

「自分の給与額面の3倍の売上がないとダメ」みたいなコメントが付くことを想定して予め回答しておくと、広告宣伝費が零細企業とは全然違ったり、研究開発とかのファクターを考慮してなかったりするので、そのあたりは自分の状況合わせて計算式や係数を変えてください。あくまでもこれは、フリーランス・零細企業向けの計算例です。

まとめ

カネのある企業と付き合わないとカネにならんですね。社会は厳しい。

Azure Functions従量課金プランのコールドスタート時間が実用レベルになっていた

最近、サーバーレスでガッツリ開発を行っている取引先(元上司と元同僚が、うちとは別系統で独立した社)から、「Azure Functionsのコールドスタートが速くなった」という情報を聞いたので、試してみた。

計測方法

  • Google Chromeの開発者ツールで手動でアクセスし、レスポンスタイムを測定。
  • 2018/09/29-30の不定期に実施。Cold Startになるように20分以上測定時間をあける。
  • 測定環境
    • 愛知県名古屋市
    • いわゆる集合住宅のインターネット回線であまり品質は高くない。たびたびスローダウンする。
    • 計測誤差が大きい環境であることは留意が必要。
  • Azure Functionsは下記の通りに設定。

検証時に使ったコード

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    context.res = {
        body: "hello"
    }
};

計測結果

体感的には5-8sec。たまに速かったり遅かったり。ちなみに、コールドスタート完了後は数10~100msec程度でレスポンスが返ってくる。

Item Time[sec]
Average 6.80
Median 6.16
Max 15.86
Min 4.25
80th percentile 7.324
85th percentile 8.755
90th percentile 10.852

N = 105

まとめ

現時点ではコールドスタートは10秒程度を考えて設計すればよさそう。決して速い訳ではないが「まれに10秒程度待たされることがある」という程度ならば、Web APIとして使うとしても許容範囲内になってきたと思う。今後(半年スパンぐらい?で)、さらに改善されてくるはずなので、今から使い始めてみるのは悪くないタイミングではないかと思う。

Azure Functionsはざっくり、

  • Azure App Service(もっと厳密にはWebJobs)上で実行されている
  • JavaScriptの場合は、.NET Coreで実装されたサービスプロセスからNode.jsが実行されれる
  • ユーザープログラムはコールドスタート時にAzure Filesから読みこむ

という構造になっている。Azure Filesが遅いと言われているのだが、いわゆるBundleを行って1ファイルにまとめたJavaScriptコードであれば、多少ファイルサイズが大きくなってもコールドスタート時間への影響は大きくないはずである。

しかし、過去に何度かAzure Functionsのコールドスタートを計測してきているのだが、サービス開始直後ぐらいは90秒ぐらいかかっていて、2017年11月ぐらいで20秒ぐらいかかっていた事を考えると、本当にめでたい。

あわせて読みたい