gitbucket-backup-pluginを4.32に対応させたお話
GitBucketが2.13系でビルドされるようになり、バイナリ互換性が無くなったらしいのでバージョンを上げてビルドしなおしました。
と書くとさも自分でやりましたと言わんばかりですが、PRを頂いたのでマージして4.32対応版をリリースしました。
ありがとうございました。
おわり
.NET 5とは?今後のリリース予定は?既存のアプリケーション対応は?!
はじめに
皆さんこんにちは!
最近マイクロソフトから発表された.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となるようです!!
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
Angularでもいい感じに多言語化したい
はじめに
4月からVBおじさん改めナウでヤングなWebエンジニアになりました弊社です。
MS信者の弊社としましては、Blazorをぶっこんでヒャッハーしたいのですが、GAしていないものをプロダクションに投入するのはまぁ・・・ねぇ・・・*1
じゃけんAngularを投入しましょうね~ということになったのですが、Angularで多言語化するにはどうすればいいのかよく分からなかったので確認してみました。
ドキュメント
困ったら公式ドキュメントを参照する。万葉集にも書かれています。
公式ドキュメント答えて曰く
- デフォルトだと
en-US
しかロケールがインポートされていないから、他のロケールでCurrencyPipe
とかを使いたかったら自分でいい感じにインポートしてね(んで、ng serve
とかng build
でパラメータとして与えてねとのこと) - 翻訳したいタグに片っ端から
i18n
属性を放り込んでいってね ng xi18n
でそのロケール用の翻訳用のファイルを生成して、そこに翻訳した結果を入力してね- 翻訳用のファイルをアプリケーションに統合するにはAOT(Ahead of time)もしくはJIT(Just in time)の二つの手段があって、AOTは事前に各ロケール別のパッケージを生成しておく必要があるけどはやいよ。JITは実行時にやるから事前の準備は要らないけどおそいよ。好きなほうを選んでいってね
だそうです。
今回はAOTでやってみることにします。
構成
今回は、ビルド済みのAngularアプリケーションをnginxでホストします。また、APIサーバとして.NET Core Web APIを使用します。APIサーバはnginxでリバースプロキシをかますことでいい感じにAngularアプリケーションからアクセスできるようにします。
クライアント側はhoge
とfuga
の二つのコンポーネントがあり、下部のリンクをクリックすると交互に画面が遷移します。
カウントはそれぞれの画面が遷移した回数を表し、これはクライアント個々の回数ではなくアプリケーション全体の数をカウントしています。そのためカウントはサーバ側のAPIでカウントをしています。この部分は.NET Core Web APIで実装されています。
多言語化
まず、ベースとなるアプリケーションを用意します。
今回はあらかじめこちらに用意しておきました。(キュー〇三分クッキング風に)
翻訳属性の付与
とりあえずは多言語化する箇所にひたすらi18n
属性を追加していきます。
翻訳ファイルの生成
以下のコマンドを使用し翻訳ファイルを生成します。
ng xi18n --output-path src/locale
デフォルトではsrc
直下に作成されるのですが、それだとなんか嫌なのでとりあえずlocale
以下に格納するようにします。
翻訳ファイルへの翻訳の記入
さっき作った翻訳ファイルをコピーし、翻訳(今回は日本語)を入力します。
serve
及びbuild
時の変換設定
デバッグ時及びビルド時に翻訳結果をマージできるように設定ファイルをいい感じに書き換えます。
すると、コマンドで日本語の翻訳結果がマージされたアプリケーションが起動します。
npm run startjp
デプロイ
URL配置
今回は以下の感じでURLに配置します
Angularはデフォルトだと/
直下に配置される前提でビルドされるっぽいので、それぞれのURLから展開できるようにbase-href
を設定します。
ビルド
それぞれ
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の設定でした。つらいね
おわり
*1:4/18に正式プレビューになったのでそろそろGAだとは思うのですが