gitbucket-backup-pluginを4.32に対応させたお話

GitBucketが2.13系でビルドされるようになり、バイナリ互換性が無くなったらしいのでバージョンを上げてビルドしなおしました。

と書くとさも自分でやりましたと言わんばかりですが、PRを頂いたのでマージして4.32対応版をリリースしました。

github.com

おわり

.NET 5とは?今後のリリース予定は?既存のアプリケーション対応は?!

はじめに

皆さんこんにちは!

闇落ちVBプログラマーの弊社(@jyuch)と申します!

最近マイクロソフトから発表された.NET 5について自分なりに調べてみました。

一般的に知られていない.NET 5のリリース予定や.NET Frameworkとの互換性、今後のリリーススケジュールについて調べてみましたので、ぜひご覧ください!

それではどうぞ!

.NET 5とは!?

.NET 5 とは .NET Core vNext の事で、.NET Core 3 の後継メジャーバージョンになる予定だそうです!

.NET Core に Unity や Xamarin などのMonoベースのランタイムを統合し、いままでプラットフォーム(デスクトップ開発、Web、モバイル・ゲーミング)ごとのバラバラだったものを統合することを目的としているそうです!!

.NET Core 3 でデスクトップ開発がポーティングされる為、.NET 5 ですべてのプラットフォームに対応できるようになるそうです!!!

.NET Core 3 の .NET Framework からのAPIポーティングとは!?

.NET Core は .NET Framework から5万ものAPIをポーティングし、その中には

が含まれるそうです

そのため、今後はデスクトップ開発でも .NET Core が使用可能になるということです!!

ただし、.NET Framework からのポーティングは .NET Core 3 以降は行われないとの事なので、Web Forms や WCF などは .NET Core では対応されないということです

そのため、Web Forms や WCF はそれぞれ Blazor や gRPC もしくは Web API で代替することをマイクロソフトは推奨しているようです

Workflowについては.NET Core へのポーティングが利用できるそうです!!

今後の .NET Framework の展望は!?

なんと、.NET Framework は 2019年4月18日にリリースされた 4.8 が最後のメジャーリリースになる予定だそうです!

つまり、これ以上の機能拡張は .NET Framework に対して行われない事になります!!

しかし、現在 .NET Framework で実装されているアプリケーションの互換性、さらに Windows .NET Framework に深く依存していることもあり今後もバグフィックスや安定性、セキュリティフィックスは適用されるそうです

また、今後も Windows に同梱されて出荷されるため、追加でインストールする手間は無さそうです

そのため、無理に .NET Framework へ移植する必要は無さそうです!*1

ただ、これから .NET Framework はフェードアウトする事を考えると、新規アプリケーションは .NET Core で実装したほうがよさそうです*2

また、アプリケーションのライフサイクルを適切に回し、 .NET Framework の EOL が来る前に既存アプリケーションを .NET Core に移行出来るように計画を立てた方がいいかもしれませんね!!

.NET (Core) 4 は!?

欠番となった .NET (Core) 4 について気になりますよね!?

なんと .NET (Core) 4 は .NET Framework 4.x 系との区別をつけやすくするためにわざと欠番となったそうです!!

.NET 5 のリリース予定は?その後のリリース予定は!?

.NET 5 は 2020年前半にRCがリリースされ、2020年11月にGAする予定みたいです

また、その後は1年ごとにリリースされ、偶数バージョンがLTSとなるようです!!

https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/05/dotnet_schedule.png

CoreCLRとMonoランタイムの統合とは!?

これまでの .NET Core には CoreCLR と呼ばれるJITベースのランタイムが使用されていました

.NET 5 ではMonoと呼ばれるランタイムが導入(統合)され、CoreCLR と Mono が相互に置き換えられるようになるそうです

Mono は CoreFX と呼ばれる.NET Core での BCL を利用可能にすることで単一のコードセットですべてのプラットフォームに対応させるそうです!

また、MonoにはAOTコンパイラがあり、それを利用することでネイティブコードを出力することが可能になるようです!!

ネイティブコードとしてコンパイルした場合、C++並みのフットプリントと実行速度を得られるそうです!!!

Java(Swift・Objective-C)との相互運用性は!?

まだ詳細は不明ですが、すべてのプラットフォームで Java と相互に運用が出来るそうです

Java言語そのものの事なのか、それともJava VMの事なのかが分かりませんでしたが、Java VMとの互換性ならばScalaとF#という地獄のような夢のコラボレーションが出来そうです!!!!!!!!!

また、一部のプラットフォーム*3では Swift や Objective-C とも相互運用できるそうです!

さいごに

いかがでしたか?

自分の理解の為に書いてみましたが、英語が読める方はこんなクソみたいな文体で書かれたクソみたいな記事を読まずに原典を読んだほうがいいかもしれませんね!!

それでは、ここまで読んでいただきありがとぅございました!*4

devblogs.microsoft.com

devblogs.microsoft.com

*1:って公式ブログにも書いてあるのでこれについては心配する必要はとりあえずなさそうです。

*2:マイクロソフトもそれを推奨している

*3:明言はされていなかったが、おそらくmacOSiOS

*4:疲れた

Angularでもいい感じに多言語化したい

はじめに

4月からVBおじさん改めナウでヤングなWebエンジニアになりました弊社です。

MS信者の弊社としましては、Blazorをぶっこんでヒャッハーしたいのですが、GAしていないものをプロダクションに投入するのはまぁ・・・ねぇ・・・*1

github.com

じゃけんAngularを投入しましょうね~ということになったのですが、Angularで多言語化するにはどうすればいいのかよく分からなかったので確認してみました。

ドキュメント

困ったら公式ドキュメントを参照する。万葉集にも書かれています。

公式ドキュメント答えて曰く

  1. デフォルトだとen-USしかロケールがインポートされていないから、他のロケールCurrencyPipeとかを使いたかったら自分でいい感じにインポートしてね(んで、ng serveとかng buildでパラメータとして与えてねとのこと)
  2. 翻訳したいタグに片っ端からi18n属性を放り込んでいってね
  3. ng xi18nでそのロケール用の翻訳用のファイルを生成して、そこに翻訳した結果を入力してね
  4. 翻訳用のファイルをアプリケーションに統合するにはAOT(Ahead of time)もしくはJIT(Just in time)の二つの手段があって、AOTは事前に各ロケール別のパッケージを生成しておく必要があるけどはやいよ。JITは実行時にやるから事前の準備は要らないけどおそいよ。好きなほうを選んでいってね

だそうです。

今回はAOTでやってみることにします。

angular.io

構成

f:id:jyuch:20190504224201p:plain

今回は、ビルド済みのAngularアプリケーションをnginxでホストします。また、APIサーバとして.NET Core Web APIを使用します。APIサーバはnginxでリバースプロキシをかますことでいい感じにAngularアプリケーションからアクセスできるようにします。

f:id:jyuch:20190505005422p:plain

クライアント側はhogefugaの二つのコンポーネントがあり、下部のリンクをクリックすると交互に画面が遷移します。

カウントはそれぞれの画面が遷移した回数を表し、これはクライアント個々の回数ではなくアプリケーション全体の数をカウントしています。そのためカウントはサーバ側のAPIでカウントをしています。この部分は.NET Core Web APIで実装されています。

言語化

まず、ベースとなるアプリケーションを用意します。

今回はあらかじめこちらに用意しておきました。(キュー〇三分クッキング風に)

github.com

翻訳属性の付与

とりあえずは多言語化する箇所にひたすらi18n属性を追加していきます。

github.com

翻訳ファイルの生成

以下のコマンドを使用し翻訳ファイルを生成します。

ng xi18n --output-path src/locale

デフォルトではsrc直下に作成されるのですが、それだとなんか嫌なのでとりあえずlocale以下に格納するようにします。

翻訳ファイルへの翻訳の記入

さっき作った翻訳ファイルをコピーし、翻訳(今回は日本語)を入力します。

github.com

serve及びbuild時の変換設定

デバッグ時及びビルド時に翻訳結果をマージできるように設定ファイルをいい感じに書き換えます。

github.com

すると、コマンドで日本語の翻訳結果がマージされたアプリケーションが起動します。

npm run startjp

f:id:jyuch:20190505020109p:plain

デプロイ

URL配置

今回は以下の感じでURLに配置します

  • /app/ja:日本語
  • /app/en:英語
  • /api:Web API

Angularはデフォルトだと/直下に配置される前提でビルドされるっぽいので、それぞれのURLから展開できるようにbase-hrefを設定します。

github.com

ビルド

それぞれ

dotnet publish -c Release -r win10-x64 --self-contained true

npm run build; npm run buildja

で成果物をビルドします。

配置

成果物をサーバにコピーして以下の感じに展開します。

└─/path/to/nginx/www/root
   └─app
       ├─en
       │  └─index.htmlとか
       └─ja
          └─index.htmlとか

そうしたら、いい感じにnginxの設定ファイルを書きます。

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  s00010;
        
        location /app/ja/ {
            root   html;
            index index.html index.htm;
            try_files $uri /app/ja/index.html;
        }
        
        location /app/en/ {
            root   html;
            index index.html index.htm;
            try_files $uri /app/en/index.html;
        }
        
        location /api/ {
            proxy_pass    http://localhost:5000;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

確認

おわりに

悩んだ時間の大半はnginxの設定でした。つらいね

github.com

おわり

*1:4/18に正式プレビューになったのでそろそろGAだとは思うのですが