ポケットモンスター ソード/シールドにHaxeが採用されていた

顛末

昨日、こういう感じのツイートを見かけかました。

結果、このような形となりました。

調査結果

確かにポケモン ソード/シールドの知的財産の表記には、Haxeの記載がありました。

確かにHaxeの記載があります。合わせて気になる点は、

  • LuaとSol(おそらく https://github.com/ThePhD/sol2 )の記載がある一方で、 hxcpp が記載がない
  • ライブラリの記載順が、比較的関係のありそうな順番に並んでいる
  • Haxeと依存関係がありそうなライブラリがLua以外にない

というから、

ものと推測されます。

この記事が注目されるようなことがあれば、もしかしたら後々答え合わせ的な情報が任天堂から出てくるかもしれません。

Haxe製のゲームについて

Haxe製のゲームでビックタイトルはポケモンが初めてでは?」という点については、若干気になるので言及しておきます。

洋ゲーなのであまり国内では有名ではなく、ポケモンと比べたら確かに知名度もないのですが、 Dead Cellsというタイトルがゲームエンジンも含めてガッツリHaxe製です。

dead-cells.com

最新のセールス数は把握してないのですが、この記事によると全世界で100万本を超えているとのことなので、ビックタイトルと言っても差し支えないのではないかと思います(開発規模がビックタイトルかという話もあるんですが、まあそれはそれとして)。

www.4gamer.net

また、国内開発タイトルにもHaxe製のものがあるのですが、情報を出していいんだかよくわからないので、公開OKをもらってから追記しておきます。

ゲーム以外(Web)でのHaxe採用事例

おそらく一番規模が大きな事例としては、DAZNHaxe/JS + React.js製です。

www.toptal.com

国内では、ヌーラボさんのサービスがHaxe/JSが使われています。中の人から使っているという返答も来ています。

ここらへんからは私も半関係者みたいな感じになってきますが、このサービスもHaxe/JS製です。

loginebula.com

数は多くないんですが、まあ普通にプロダクションで使えるプログラミング言語です。

Azure Cosmos DBのデータ構造

昔書いたCassandraの記事 Cassandraのデータモデル - terurouメモ 的にCosmos DBのデータ構造と用語を整理。

f:id:terurou:20191022223028p:plain

データベースアカウント

  • Azure PortalからCosmos DBを作成するとできるトップレベル要素
    • 図のデータベースよりも上位の存在
  • データベースエンジン(SQL API、Azure Table API、MongoDB API、Cassandra API、Gremlin API、etcd API)はこのレベルでしか設定できない

データベース(図ではDatabase表記)

  • RDBのデータベース(もしくはスキーマ)相当、CassandraのKeyspace相当
  • データベースレベルでスループットをプロビジョニング(上限RUの設定)すると、配下のコンテナー全てでプロビジョニングスループットが共有される

コンテナー(図ではContainer表記)

  • RDBのテーブル相当、CassandraのTable相当
  • スループットはコンテナー個別にも設定することができる
    • Cosmos DBリリース直後はコンテナーに対してしか設定できなかったはずだが、いつの間にかデータベースレベルで設定できるようになっていた

Partition Key

Cosmos DBの設計で特に重要となるポイント

  • CassandraのPartition Key相当、RDBには相当するものはない
    • Partition Keyはプライマリキーではない
  • Partition Keyによって論理パーティションが分割される
  • Partition Keyは複合キーを指定することができる
  • 論理パーティション単位でシャーディングとインデックスの作成が行われる
    • 分散しないPartition Keyを設定してしまうと、データベース全体の性能に影響してしまう
    • とはいえ、論理パーティションを分割しすぎると有効にインデックスが使えなくなってしまう(レンジスキャンしたいケースが典型例)
  • トランザクションは論理パーティション内でのみ有効となる
    • トランザクションは、ストアドプロシージャ等のCosmos DB側で動作するロジックでのみ有効

Item(MSDNでは "項目" と訳されているが…)

  • RDBのレコードに相当
    • もしくは、ドキュメント、エンティティ
  • IDにより識別される

ID

  • いわゆるPrimary Key
  • 一意キー制約は、論理パーティション内で有効
    • コンテナー単位ではないので注意
  • ID指定の検索は速く、RUの消費も最小限になる

参考資料

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