ASP.NET Coreのバージョンを3.1から6.0にしました。という記事を書いてブログに上げようとした時にエラーが発生しました。しばらくブログの更新を怠っていたら、いつの間にか記事をアップできなくなっていたようです...

マイグレーション失敗?

当サイトでは、ブログ記事をvscodeで作成して専用の拡張機能(nekoniBlogEditor。非公開)からサーバーにアップロードする仕組みを採っています。
VSCode拡張機能による記事の作成と投稿

今回は拡張機能の方は特に手を入れていないので、原因が有るとしたら.NET6.0へマイグレーションしたサーバーの方に有ると思い込んでました。
でも、開発環境でのテストだと記事をアップすることが出来るのです...うーん。

エラーメッセージを見るとこんな感じ。

Error: certificate has expired\n\tat TLSSocket.onConnectSecure (_tls_wrap.js:1497:34)\n\tat TLSSocket.emit (events.js:315:20)\n\tat TLSSocket._finishInit (_tls_wrap.js:932:8)\n\tat TLSWrap.onhandshakedone (_tls_wrap.js:706:12)\n\tat TLSWrap.callbackTrampoline (internal/async_hooks.js:131:14)

certificate has expiredという文からhttps関連かなぁというところまでは想像が付く(本番と開発環境の違いもそれくらいしかない)ものの、なにをどうすればいいのやら...

困ったときはgoogle先生。ということで、エラーメッセージをそのまま検索ボックスへ放り込んでみました。

原因はわかったけども...

そしてたどり着いたのが以下のissue。
Electron - GitHub

vscodeがElectronを基盤にしていることは周知のとおりですが、Let's Encryptの証明書に接続できなくなっているなんて... 証明書に接続するわけじゃない...焦り

原因は判明しましたが、どうしよう...
ということで、ここからマイグレーションに全く関係の無い大改造が始まりました...

そしてF#へ移行

Electronの修正が完了しvscodeの基盤がアップグレードされるのを待つのはイヤだなぁ...いつになることやら...。
ということで、nekoniBlogEditorを作り直すことにしました。

実は、マイグレーションとは別にブログシステム全体をF#で実装しなおす計画が進行中だったのです。
nekoniBlogEditorもいずれTypeScriptからFableでの実装に変えようと考えていたので、もうやるしかない!

ついでに現行のシステムではmetaweblog(xml-rpc)を使って記事の投稿を行なっているのですが、普通にREST apiでの実装にします。

変更内容は以下のような感じ。

  • 記事投稿用のサーバーを新たに立ち上げる
  • Fable.Remotingの.NETクライアントを使用してコンソールアプリを作成。記事投稿用サーバーのクライアントになる。
  • nekoniBlogEditorからは上記のコンソールアプリを呼び出して通信する

要点だけ上げると3つですが、ひとつひとつは結構重い....

記事投稿用サーバーはGiraffeで新規作成。
以前に作成した管理用画面はSaturnを使っていましたが、Giraffeの方がASP.NET Coreの上に薄く実装されたフレームワークなので.NET6にも対応しているかな?と思い今回はGiraffeで。1
MS公式の紹介記事にも有りますし。

Fable.Remotingに.NETクライアントが有って良かった。Zaidさんナイスです。

vscode拡張機能から外部実行ファイルを起動ってどうやってやるんだろ...
ググったらnodejsのchild_processというのを使うということらしい。
というか、vscode拡張機能をそもそもF#で作成したことないぞ...

と、不安な要素をひとつひとつ解決して、なんとか記事投稿が出来るようになりました。
1週間かかったよ...

まぁ、当分記事ネタには困らないです... ハイ


  1. 執筆時点で.NET6対応版はまだalpha版でしたが問題は無さそうでした。