ODP.NET Support for .NET Core
※2018/1/23追記 ようやくODP .NET Coreのベータ版が近いうちに提供されるとのことです!
Apologies for lack of ODP .NET Core status updates. Beta coming very soon. Attend free virtual Office Hours 9 AM PT Wed Feb 7 to learn more and ask questions. https://t.co/OBZkfp2Bu4 It will also discuss upcoming ODAC 12.2c R1 Update 1 and VS tools enhancements. #dotnetcore
— Oracle .NET Team (@OracleDOTNET) 2018年1月22日
少し前になりますが、Oracle .NET Teamが、.NET Coreに対するODP.NETのサポートについてtweetしていました。
ODP on .NET Core Statement of Direction: https://t.co/YCvkgxucHu
— Oracle .NET Team (@OracleDOTNET) 2017年3月13日
TL;DR RTM end of 2017. Core 2.0 min req. EF+ASP Core planned post-2017
概要 (ODP.NET Managed Driver)
- .NET Core : 2017年末にサポート (.NET Core 2.0以降)
- ASP.NET Core : 未定 (.NET Coreに対するサポート開始以降)
- Entity Framework Core : 未定 (.NET Coreに対するサポート開始以降)
以下、このgeneral product directionの主要な箇所を簡単に意訳してみました。
ODP.NET Statement of Direction for Microsoft .NET Core
Oracleは2017年の末頃に、.NET Coreに対するODP.NET Managed Driverを提供します。対象OSはWindowsおよびOracle Linuxの予定です。ODP.NET Managed Driverは他のOSに対するサポートを追加するかもしれません。他のLinuxディストリビューションに対してもサポートを継続して検討し、将来的には対象のリストに追加する予定です。
.NET Core 2.0よりも前のバージョンに対してODP.NETを提供する予定はありません。.NET Core 2.0において大幅に拡張されるAPIによって、ODP.NETによる.NET Coreのサポートが可能になります。
ODP.NETの最初のリリースにおいては、Entity Framework CoreおよびASP.NET Coreに対するサポートは想定していません。将来的にはこれらのフレームワークに対するサポートを提供する予定です。
.NET Coreに対するODP.NET Unmanaged Driverの提供は予定していません。
うーん、.NET Core 2.0のリリースが延びてるから、それにつられてOracleのproviderもずるずると…って感じですね。オープンソースにする予定はないって言ってるし。
Entity Framework Coreに対するproviderの開発に時間がかかるからリリースずらすっていうのはわかるけど。
Cake - C# Make -
Cakeって何?
Cakeを一言で言うと、「C#で書ける.NETのためのビルド自動化ツール」です。
定義は以下。
Cake (C# Make) is a cross platform build automation system with a C# DSL to do things like compiling code, copy files/folders, running unit tests, compress files and build NuGet packages.DSL
NuGetパッケージをリストア → ビルド → 単体テスト → カバレッジ取得 → パッケージング → NuGetリポジトリにPublish…みたいな一連の処理を全てC#で記述可能です。
Fullの.NET Frameworkと.NET Coreのどちらもビルドでき(MSBuild ToolsVersion 15.0は今対応中)、Cake自体の実装も昨年.NET Coreに移行しました。
Cakeの特徴
1. オープンソース
2016年6月に.NET Foundationに参加を表明しました。→.NET Foundation - Free as in Cake
現在、GitHub上で精力的に開発・管理されています。いきなりissueやPullRequest投げるよりも、まずgitterで質問してみるのがオススメ。
2. クロスプラットフォーム
Windows、LinuxおよびOS Xのいずれにおいても動作します。AppVeyor、Jenkins、VSTS、TravisおよびBamboo等のCIツールにも対応済です。
3. ビルドスクリプトをC#で書ける
皆さんは一連のビルド処理どうやってます?powershellやバッチファイルの秘伝のタレ…Fakeも有名ですが、F#なので敬遠してるって方も多いんじゃないかなあ。
CakeはFakeにかなり影響を受けていて、Taskベースのビルド処理を全てC#で記述できます。
実際のスクリプトはこんな感じ。
ふだんC#で開発している人ならば、そんなに違和感なくスラスラと読めるはず。
4. 拡張可能
プラットフォーム依存の処理を書きたい場合はAddinを開発することで拡張することができます(これもC#で書ける!)。Cakeスクリプトは基本的にC#でできることなら何でも書けるので、スクリプトごとにメソッドを書いてもいいですが、複数のアプリで使いまわしたい場合やCakeにContributeしたい場合はAddinを書くのがオススメ。
現在公開されているAddinは、AzureやAWS、Xamarin、Dockerなど80種以上。一覧はCake - Addinsを参照。
まとめ
.NET Foundationに参加したあたりに試しに使ってみたら結構すんなり適用できたので、最近はもっぱらCakeで遊んでます。有名どころだとNUnitなんかでも採用されてたりするし、Communityの雰囲気もいいんでしばらくは期待できそう。.NET Coreでの使用例についても書きたいけど、Visual Studio2017がRTMになってからですね。
Cakeビルド時エラー:Unknown token (1)
Unknown token
最近C#/ASP.NETアプリのビルドにCakeを使うことが多くなったのですが、久しぶりにはまってしまったのでメモ。
ビルド対象のプロジェクトのパスにマルチバイト文字が含まれているとエラーになります。 0.15.2まではうまくいってたんだけど、0.16.0からエラーになるみたい。 普段日本語のプロジェクト名なんてほとんど使わないから気が付かなかった…
再現手順
こんな感じで適当なサンプルをcloneしてきて…
mkdir C:\マルチバイト cd C:\マルチバイト git clone https://github.com/cake-build/example cd example
Verbosity=Diagnosticでビルドしてみると、こんなエラーを吐きます。
PS C:\マルチバイト\example> .\build.ps1 Preparing to run build script... Running build script... Module directory does not exist. Analyzing build script... Analyzing C:/マルチバイト/example/build.cake... Processing build script... Installing tools... Error: System.NotSupportedException: Unknown token 場所 Cake.Core.IO.Globbing.GlobTokenizer.ScanToken() 場所 Cake.Core.IO.Globbing.GlobTokenizer.Scan() 場所 Cake.Core.IO.Globbing.GlobParserContext.Accept() 場所 Cake.Core.IO.Globbing.GlobParser.Parse(GlobParserContext context) 場所 Cake.Core.IO.Globbing.GlobParser.Parse(String pattern, Boolean caseSensitive) 場所 Cake.Core.IO.Globber.Match(String pattern, Func`2 predicate) 場所 Cake.Core.IO.GlobberExtensions.Match(IGlobber globber, String pattern) 場所 Cake.Core.IO.GlobberExtensions.GetFiles(IGlobber globber, String pattern) 場所 Cake.NuGet.NuGetContentResolver.GetFiles(DirectoryPath path, PackageReference package) 場所 Cake.NuGet.NuGetContentResolver.GetToolFiles(DirectoryPath path, PackageReference package) 場所 Cake.NuGet.NuGetContentResolver.GetFiles(DirectoryPath path, PackageReference package, PackageType type) 場所 Cake.NuGet.NuGetPackageInstaller.Install(PackageReference package, PackageType type, DirectoryPath path) 場所 Cake.Core.Scripting.ScriptProcessor.InstallTools(ScriptAnalyzerResult analyzerResult, DirectoryPath installPath) 場所 Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath, IDictionary`2 arguments) 場所 Cake.Commands.BuildCommand.Execute(CakeOptions options) 場所 Cake.CakeApplication.Run(CakeOptions options) 場所 Cake.Program.Main()
なぜ?
どーやらCake.Core.IO.Globbing.GlobTokenizer.ScanToken()でthrow new NotSupportedExceptionされてるみたいなんだけど、なんでだろ? Commit履歴見てみると、ちょくちょくパスに使える文字を追加してる…ホワイトリストじゃなくて禁止文字だけ定義したブラックリスト方式でいいんじゃない?
gitterで聞いてみたところ、gep13に「issueあげてくれますか?」って言われたんで書いてみた→#1422
まあこの手のマルチバイト問題はよくあることですよね。まだCakeのソースは詳しく読んでないんで、年越しちゃうかな。
Google XML Sitemaps
今回は、Google XML Sitemapsを利用してサイトマップを作成し、Googleウェブマスターツールにも登録してみました。
1.プラグインから「Google XML Sitemaps」を検索し、「今すぐインストール」をクリックします。
2.「プラグインを有効化」をクリックします。
3.インストール済みプラグインに追加されていることを確認します。
4.設定→XML-Sitemap
5.「your sitemap」ないし「your main sitemap and all sub-sitemaps」をクリックします。
6.サイトマップのインデックスファイルのURLを確認します。
7.続いて、googleにログインし、WEBマスターツールにサイトを追加します。
8.指示に従って所有権を確認します。
10.手順7で確認したURLを入力し、「サイトマップを送信」をクリックします。
11.「ページを更新する」をクリックし、サイトマップが追加されていることを確認します。
以上の手順で終了です。私の環境では、サイトマップ登録後数時間でgoogle検索結果に表示されるようになりました。 Google XML Sitemapsの設定は、基本的にはデフォルトのままで大丈夫です。詳細な設定方法は他のサイトを参照してください。
QNAPへのWordPress導入
QNAPを使ったWordPress導入の手順をまとめてみました。
1.App CenterからphpMyAdminを検索し、「QTSに追加」します。
2.App CenterからWordPressを検索し、「QTSに追加」します。
3.phpMyAdminを起動します。 ユーザ名:root パスワード:admin
4.phpMyAdminのホームが表示されます。ここで「パスワードを変更する」をクリックします。
5.任意のパスワードを入力し、「実行」をクリックします。 ここでは省略しますが、WordPress用のユーザを作成すべきでしょう。
6.データベースタブへ移動し、データベースを作成します。 (ここでは既にwordpressデータベースが作成されています)
7.WordPressを起動し、以下の画面が表示されたら「Let's go!」をクリックします。
8.以下の情報を入力し、「Submit」をクリックします。 Database Name:手順6で作成したデータベース名 User Name:MySQLのユーザ名(初期値は"root") Password:MySQLのパスワード(手順5で変更したもの) Database Host:localhost Table Prefix:wp_
9.以下の画面が表示された場合、指示に従ってwp-config.phpを書き換えます。
10.インストールが終了すると、QNAPのスタート画面のWordPressショートカットから、WordPressを起動できるようになります。 (日本語化の手順はここでは省略します)
11.phpMyADminを確認すると、wordpressデータベースに以下のようにテーブルが作成されていることが確認できます。