振り返り

  • 忙しくはなかったが、のんびりもできない一年だった。
  • iOS はiOS7, iOS8, 64bit対応と細々とバージョンアップ。iOS7対応よりiOS8対応のほうが大変だった。
  • C#ASP.NET MVC, Unity, Entity Framework, SignalR, WinForms, Silverlight などと半年以上格闘した。LINQ、拡張メソッド、async/await は便利だと再認識。Azure は思ったよりも使いやすかった。来年リリースされるであろう vNext が楽しみだ。
    • Entity FrameworkのCode Firstは便利だー。DBFluteの DateFromTo、LoadReffer、Sql2Entity、外出しSQLなどの便利機能をある程度Entity Frameworkで使えるようにしてそんなに不満がない状態になった。懸案事項のLocalDBに対してDBFluteでReplaceSchemaもできるようになった。
    • dotnetではSeasar系のプロダクトを採用することは多分もうない。JavaはまだまだSeasar系でいけるが。
  • 昔つくった今でも使っている自作のC++のプログラムをGoに移植中。Goはそこまで良い言語とは思えないが配布が楽。RustもよさげだがGoはGAEで動くからなー。
    • 来年Go製のプロダクトをリリースすることになりそうだ。Slim3のGo版を作ってる時間があるだろうか。。。
  • F#さわってみたが関数型の言語はどうもしっくりこない。
  • 今年も Jewel mania で遊んでいたが最高レベルの 600 クリアして、これ以上はない感じなので卒業。
  • ブレイキング・バッド は面白いといえば面白い。まだシーズン2までしかみてないが。。。
  • 来年はなんとかして今年手がつけられなかったアレを作ってみたい。

Go 1.4 on windows で "go: cannot find GOROOT directory:" が出るときの対応

通常は "go: cannot find GOROOT directory:" がでるのでは Go を c:\go にインストールせず、GOROOT を設定しない場合かな。

いままでGOROOTを設定していて Go1.3 までは大丈夫だったが、Go 1.4 から "go: cannot find GOROOT directory:" とでるようになった。
Go 側の仕様変更なのかとおもったがハマっている人もあまりいない感じ。
原因は GOROOT を ジャンクションで作成しているからのようだ。
ジャンクションを使っていて初めて遭遇した動かないパターン。
シンボリックリンクコマンドプロンプトを管理者として起動する必要があるのでできればつかいたくないんだけどな。。。

C:\dev>dir /B go*
go-1.3.3
go-1.4

C:\dev>set GOROOT=c:\dev\go-1.3.3

C:\dev>set PATH=%GOROOT%\bin;%PATH%

C:\dev>go version
go version go1.3.3 windows/amd64

C:\dev>set GOROOT=c:\dev\go-1.4

C:\dev>set PATH=%GOROOT%\bin;%PATH%

C:\dev>go version
go version go1.4 windows/amd64

普通に問題なく動く。
でもc:\dev\go を GOROOTにしたいので(バージョンを切り替えやすくするため)

C:\dev>set GOROOT=c:\dev\go

C:\dev>set PATH=%GOROOT%\bin;%PATH%

C:\dev>mklink /J c:\dev\go c:\dev\go-1.3.3
c:\dev\go <<===>> c:\dev\go-1.3.3 のジャンクションが作成されました

C:\dev>go version
go version go1.3.3 windows/amd64

c:\dev>rmdir go

C:\dev>mklink /J c:\dev\go c:\dev\go-1.4
c:\dev\go <<===>> c:\dev\go-1.4 のジャンクションが作成されました

C:\dev>go version
go: cannot find GOROOT directory: c:\dev\go

ジャンクションじゃだめなのとかとシンボリックでためす。
管理者としてコマンドプロンプトを起動しなおす。

C:\dev>rmdir go

C:\dev>set GOROOT=c:\dev\go

C:\dev>set PATH=%GOROOT%\bin;%PATH%

c:\dev>mklink /D c:\dev\go c:\dev\go-1.4
c:\dev\go <<===>> c:\dev\go-1.4 のシンボリック リンクが作成されました

C:\dev>go version
go version go1.4 windows/amd64

うごいた。Go 1.3.3でももちろん問題ない。

ちなみにフルパス指定じゃないとだめなようだ。

C:\dev>rmdir go

c:\dev>mklink /D go go-1.4
go <<===>> go-1.4 のシンボリック リンクが作成されました

C:\dev>go version
go version go1.4 windows/amd64

うまくいったようにみえるが、別にコマンドプロンプトを起動。

c:\>set GOROOT=c:\dev\go

c:\>set PATH=%GOROOT%\bin;%PATH%

c:\>go version
go: cannot find GOROOT directory: c:\dev\go

動かない。。。

Swingアプリが Java8 u25 でやっと日本語入力でおちなくなった

Area: client-libs
Synopsis: JRE 8u20 crashes while using Japanese IM on Windows

The VM crashes while using Swing controls when some Japanese or Chinese characters are input on Windows platform. The issue is now fixed.

See 8058858 (not public).

http://www.oracle.com/technetwork/java/javase/8u25-relnotes-2296185.html

Java8 の問題じゃなくて JRE 8u20 on Windows の問題だったのか。。。

これで Freemind と自作Swingアプリを Java8 でつかえるぜ。Update したら問題なく動くようになった。

gitblit 入門

gitblit とは

gitblit はオープンソースな git server。今は ticket も管理できるようになっている。
http://gitblit.com/

  • 1.4.0 から ticketが追加。
  • 1.5.0 から java7で動くようになった。
  • 1.6.1 現在(そろそろ1.7.0がでそうだ)

gitblit を使うきっかけ

最初 gitlab(https://about.gitlab.com/) をつかっていたが遅い(gitのプロセス起動してパースしているので。https://gist.github.com/catatsuy/8827731 が詳しい)ので gitblit に乗り換えた。
gitblit はプラグインが groovy でかけるので気に入っている。
gitblit 自体は JavaWicket をつかって書かれている。git 操作は JGit、検索には lucene を使っている。

いまなら gitbucket(https://github.com/takezoe/gitbucket) のほうがいいのかもしれないが、scala はよくわかんないのでカスタマイズしずらいので使っていない。gitbucket も jetty, jgit を使っているので java -jar gitbucket.war で起動する。検索は Solr かなとおもったが検索はまだ無いようだ。https://github.com/takezoe/gitbucket/issues/240

gitblit の導入

パターンとしては2つ。

WAR版:Tomcatなどのservletコンテナにwarをdeploy。
GO版:オールイン型(jetty組み込み)で解凍して gitblit.[cmd|sh] をうごかせば動くタイプ

基本GO版でいいと思う。

Windows版は http://dl.bintray.com/gitblit/releases/gitblit-1.6.1.zip
Linux版は http://dl.bintray.com/gitblit/releases/gitblit-1.6.1.tar.gz

Windows版をとってきて解凍するとディレクトリ構成は以下のようになっている。

>tree
├─amd64
├─data
│  ├─certs
│  ├─git
│  ├─gitignore
│  ├─groovy
├─docs
│  ├─bootstrap
│  │  ├─css
│  │  ├─img
│  │  └─js
│  ├─d3
│  └─prettify
├─ext
├─ia64
└─x86

>dir /B *.cmd
add-indexed-branch.cmd
authority.cmd
gitblit-stop.cmd
gitblit.cmd
installService.cmd
migrate-tickets.cmd
reindex-tickets.cmd
uninstallService.cmd

>type gitblit.cmd
@java -jar gitblit.jar --baseFolder data %*

>type gitblit-stop.cmd
@java -jar gitblit.jar --stop --baseFolder data %*

>java -jar gitblit.jar --help
*****************************************************************
Gitblit v1.6.1
*****************************************************************

 --alias ALIAS               : Alias of SSL certificate in keystore for serving
                               https.
 --dailyLogFile              : Log to a rolling daily log file INSTEAD of
                               stdout.
 --gitPort PORT              : Git Daemon port to serve.  (port <= 0 will
                               disable this connector)
 --help (-h)                 : Show this help
 --httpPort PORT             : HTTP port for to serve. (port <= 0 will disable
                               this connector)
 --httpsPort PORT            : HTTPS port to serve.  (port <= 0 will disable
                               this connector)
 --ldapLdifFile FILE         : Path to LDIF file.  This will cause an in-memory
                               LDAP server to be started according to gitblit
                               settings
 --repositoriesFolder PATH   : Git Repositories Folder
 --requireClientCertificates : Require client X509 certificates for https
                               connections.
 --settings FILE             : Path to alternative settings
 --shutdownPort PORT         : Port for Shutdown Monitor to listen on. (port <=
                               0 will disable this monitor)
 --sshPort PORT              : Git SSH port to serve.  (port <= 0 will disable
                               this connector)
 --stop                      : Stop Server
 --storePassword PASSWORD    : Password for SSL (https) keystore.
 --tempFolder PATH           : Folder for server to extract built-in webapp
 --userService VAL           : Authentication and Authorization Service
                               (filename or fully qualified classname)

Example:
  java -server -Xmx1024M -jar gitblit.jar --repositoriesFolder c:\git --httpPort 80 --httpsPort 443

デフォルトで dataフォルダが基本ディレクトリになる(ここにプラグインとか証明書とかが入る)。
data/git がデフォルトの git repository になる。

gitbit のGO版の起動

>java -jar gitblit.jar 
2014-10-25 10:27:38 [INFO ] *****************************************************************
2014-10-25 10:27:38 [INFO ]             _____  _  _    _      _  _  _
2014-10-25 10:27:38 [INFO ]            |  __ \(_)| |  | |    | |(_)| |
2014-10-25 10:27:38 [INFO ]            | |  \/ _ | |_ | |__  | | _ | |_
2014-10-25 10:27:38 [INFO ]            | | __ | || __|| '_ \ | || || __|
2014-10-25 10:27:38 [INFO ]            | |_\ \| || |_ | |_) || || || |_
2014-10-25 10:27:38 [INFO ]             \____/|_| \__||_.__/ |_||_| \__|
2014-10-25 10:27:38 [INFO ]                          Gitblit v1.6.1
2014-10-25 10:27:38 [INFO ]
2014-10-25 10:27:38 [INFO ] *****************************************************************
2014-10-25 10:27:38 [INFO ] Running on Windows 8.1 (6.3)
(略)
2014-10-25 10:27:48 [INFO ] jetty-9.2.3.v20140905
(略)
2014-10-25 10:28:17 [INFO ] Started @40714ms

jetty-9.2.3.v20140905 でうごいている。

最初は初期処理がはしるので時間がかかる。再起動すると Started @23528ms 半分ぐらい。
速いマシンだと Started @3047ms で立ち上がる。

gitbit へのアクセス

https://localhost:8443/

でアクセス可能になる。デフォルト https に対応していて(自己証明書だが)、httpではアクセスできない。
httpでアクセスする場合は data/gitblit.propertie の server.httpPort = 0 を変更するかコマンドラインオプションで --httpPort で指定が必要となる。

gitblit へのログイン

admin/adminではいれる

設定値はファイルなので
data/users.conf
にユーザを設定できる。

gitblit から clone

http://gitblit.com/setup_transport_http.html

httpsが自己証明書なのでhttps経由でgitをつかうなら
git clone --config http.sslVerify=false https://username@localhost:8843/hoge.git
のようにしないとエラーになるので注意。

gitblitをビルドする

http://gitblit.com/design.html

JDK 1.7 と Ant が必要。

>git clone https://github.com/gitblit/gitblit.git

>cd gitblit

>ant -p
Main targets:

 buildApiLibrary        Builds the Gitblit RPC client library
 buildFederationClient  Builds the stand-alone Gitblit federation client
 buildGO                Build Gitblit GO distribution
 buildManager           Builds the stand-alone Gitblit Manager
 buildSite              Build the Gitblit website
 buildWAR               Build Gitblit WAR
 clean                  Cleanup all build artifacts and directories
 compile                compiles Gitblit from source
 installMaven           Install Gitblit JAR as Maven module
 installMoxie           Install Gitblit JAR as a Moxie artifact
 nextMinorReleaseCycle  prepare for the next minor release development cycle
 nextPointReleaseCycle  prepare for the next point release development cycle
 publishBinaries        Publish the Gitblit binaries to Bintray
 publishSite            Publish the Gitblit site to a host
 report                 generate dependency report
 run                    Run Gitblit GO
 setup                  Setup up project
 tagRelease             tag a new version and prepare for the next development cycle
 test                   compiles Gitblit from source and runs unit tests
 uploadMaven            Upload Gitblit JAR to remote Maven repository
Default target: compile

>ant

ant では maven みたいに http://gitblit.github.io/moxie/ というantタスクをつかって jar をとってくるの(なので初回実行は待たされる)と
gitblit.properties から com.gitblit.Keys クラスが作成する。
あと src/main/distrib/data を data フォルダにコピーするなど実行に必要なことが行われる。

gitblit を ant で実行

>ant run

初回:Started @11334ms
2回目:Started @3905ms
早いな。java8でビルドしたからか?

gitblitを eclipse で実行

Eclipse などの ide(IDEAも対応している)にソースをimportしてビルド。特にEclipseプラグインを入れる必要もない。
あとは com.gitblit.GitBlitServer をJavaアプリケーションとして実行すればよい。

Started @7989ms で起動する。
なぜ同じマシンなのに ant、eclipse から実行だとGO版と起動時間ちがうのだ。

gitblit GO版だと起動に時間がかかっている遅い原因を調べる

>ant buildGO

で build/target に 配布物ができる。
展開して実行してみたが、 Started @16024ms となりやはり時間がかかっている。

log4j.properties に log4j.logger.org.eclipse.jetty=DEBUG を仕込んで確認してみた。

時間がかかっているのはここ

2014-10-25 13:09:58 [DEBUG] Extracting entry = null from jar file:/C:/oss/gitblit/build/target/gitblit-1.6.2-SNAPSHOT/gi
tblit.jar
2014-10-25 13:10:07 [DEBUG] webapp=file:/C:/oss/gitblit/build/target/gitblit-1.6.2-SNAPSHOT/data/temp/webapp/

ようは gitblit.jar を解凍している部分がおそいということか。
7zip で解凍しても8秒ぐらいはかかっている。
ant or eclipseから実行だとすでに展開済みだからはやいのか。

java -jar gitblit.jar だと data/temp/webapp/ に展開して、終了時にフォルダを消している。
消さなくておいいと思ったがバージョンアップの時に困るか。。。

まあ、開発時ははやいので特にこまることはないが。。。。

gitblit でプラグイン開発

src/main/distrib/data/groovy にある *.groovy を参考にするとよい。

>dir /B  src\main\distrib\data\groovy\*.groovy
blockpush.groovy
fisheye.groovy
fogbugz.groovy
jenkins.groovy
localclone.groovy
protect-refs.groovy
redmine-fetch.groovy
sendmail-html.groovy
sendmail.groovy
subgit.groovy
thebuggenie.groovy

src/main/distrib/data/groovy のファイルを書き換えても data/groovy にコピーしないと反映されないので注意。
ちなみに ant setup でファイルで data/groovy にコピー可能。data/groovy を直接かえても ant setup はファイル日付をみているので上書きはされない。

自作のChrome ExtensionがChrome 35から無効に

重要:Chrome 拡張機能についてのお知らせ
https://productforums.google.com/forum/#!category-topic/chrome-ja/7qSACiy8EtY
要はChrome WebStore からダウンロードしたものじゃないと拡張機能は有効にならない。
デベロッパモードで入れていたものが無効になった。
削除して再インストールしたら有効になったがChromeを起動しなおすと無効になってしまう。。。。
この動きはどうもWindowsだけのようだ。MacChromeはいまのところ大丈夫。


まだ一応回避手段が提供されている
Policy List http://www.chromium.org/administrators/policy-list-3
によるとWindowsの場合はドメインに参加しているか、否かで変わる。


ドメインに参加している場合は管理者モードでコマンドプロンプトを上げてExtensionを登録すればよい。
実際にきちんと動いた(Windows 8.1で確認)。


reg add HKLM\Software\Policies\Google\Chrome\ExtensionInstallWhitelist /v 1 /d extension_id1
reg add HKLM\Software\Policies\Google\Chrome\ExtensionInstallWhitelist /v 2 /d extension_id2


ドメインに参加していない場合は https://code.google.com/p/chromium/issues/detail?id=259236#c11 の通りにで基本OK

こんなことするならChromeのDev版とかをつかうほうがいいのかもしれないが、
どんなバグが仕込まれるかわからないので新しい機能を試すときぐらいしか使いたくない。


そろそろ Chrome から別のブラウザに乗り換える時期なのかもしれないな。。。

Core CLR に切り替える

Core CLR は Side by side を dotnet framework ごとやるやつなので
dotnet framework アセンブリごとをWebに含めてdeployするようになる。
Webアプリごとにdotnet frameworkのバージョンを別にもてるようになる。


c:\oss\aspnet\Home>kvm upgrade -svrc50
c:\oss\aspnet\Home>kvm alias
Alias Name
----- ----
default KRE-svrc50-x86.0.1-alpha-build-0481

切り替わったようだ。


c:\oss\aspnet\Home>cd samples\HelloMvc
c:\oss\aspnet\Home\samples\HelloMvc>set KRE_TRACE=1
c:\oss\aspnet\Home\samples\HelloMvc>k web
Loaded Module: klr.core45.dll
Found DLL Export: CallApplicationMain
...

klr.net45.dll から klr.core45.dll に変わってもきちんと動いた。


>dir /S /B %USERPROFILE%\.kre\packages\KRE-svr50-x86.0.1-alpha-build-0481 | findstr .dll | wc -w
14
>dir /S /B %USERPROFILE%\.kre\packages\KRE-svrc50-x86.0.1-alpha-build-0481 | findstr .dll | wc -w
232

dllがものすごく増えるのでAzureへのdeployさらに遅くなりそうだな。。。
それともdeploy時にAzure側でdllをとってくるようになるのかな。。。

aspnet vnext でHello MVC


c:\oss\aspnet\Home\samples\HelloMvcWeb>kpm resore
c:\oss\aspnet\Home\samples\HelloMvcWeb>dir ..\..\packages /B
Common.1.0.0
K.Roslyn.0.1-alpha-build-0137
Microsoft.AspNet.Diagnostics.0.1-alpha-build-0682
Microsoft.AspNet.FeatureModel.0.1-alpha-build-0444
Microsoft.AspNet.FileSystems.0.1-alpha-build-0162
Microsoft.AspNet.Hosting.0.1-alpha-build-0572
Microsoft.AspNet.Http.0.1-alpha-build-0444
Microsoft.AspNet.HttpFeature.0.1-alpha-build-0444
Microsoft.AspNet.Mvc.0.1-alpha-build-1268
Microsoft.AspNet.Mvc.Core.0.1-alpha-build-1268
Microsoft.AspNet.Mvc.ModelBinding.0.1-alpha-build-1268
Microsoft.AspNet.Mvc.Razor.0.1-alpha-build-1268
Microsoft.AspNet.Mvc.Razor.Host.0.1-alpha-build-1268
Microsoft.AspNet.PipelineCore.0.1-alpha-build-0444
Microsoft.AspNet.Razor.0.1-alpha-build-0197
Microsoft.AspNet.RequestContainer.0.1-alpha-build-0572
Microsoft.AspNet.Routing.0.1-alpha-build-0577
Microsoft.AspNet.Security.0.1-alpha-build-0506
Microsoft.AspNet.Security.DataProtection.0.1-alpha-build-0153
Microsoft.AspNet.Server.WebListener.0.1-alpha-build-0520
Microsoft.Bcl.Immutable.1.1.20-beta
Microsoft.Bcl.Metadata.1.0.11-alpha
Microsoft.CodeAnalysis.Common.0.7.4051916-beta
Microsoft.CodeAnalysis.CSharp.0.7.4051916-beta
Microsoft.CSharp.4.0.0.0
Microsoft.DataAnnotations.0.1-alpha-build-0100
Microsoft.DataAnnotations.Core.0.1-alpha-build-0100
Microsoft.DataAnnotations.Supplemental.0.1-alpha-build-0100
Microsoft.Framework.ConfigurationModel.0.1-alpha-build-0233
Microsoft.Framework.DependencyInjection.0.1-alpha-build-0389
Microsoft.Framework.Logging.0.1-alpha-build-0172
Microsoft.Framework.Runtime.Interfaces.0.1-alpha-build-0446
Microsoft.Net.Server.0.1-alpha-build-0520
Microsoft.Win32.Primitives.4.0.0.0
Newtonsoft.Json.5.0.8
System.ApplicationContext.4.0.0.0
System.Collections.4.0.0.0
System.Collections.Concurrent.4.0.0.0
System.ComponentModel.4.0.0.0
System.Console.4.0.0.0
System.Diagnostics.Contracts.4.0.0.0
System.Diagnostics.Debug.4.0.10.0
System.Diagnostics.Tools.4.0.0.0
System.Dynamic.Runtime.4.0.0.0
System.Globalization.4.0.10.0
System.Globalization.Extensions.4.0.0.0
System.IO.4.0.0.0
System.IO.Compression.4.0.0.0
System.IO.FileSystem.4.0.10.0
System.IO.FileSystem.Primitives.4.0.20.0
System.Linq.4.0.0.0
System.Linq.Expressions.4.0.0.0
System.Net.Primitives.4.0.10.0
System.ObjectModel.4.0.0.0
System.Reflection.4.0.10.0
System.Reflection.Emit.ILGeneration.4.0.0.0
System.Reflection.Emit.Lightweight.4.0.0.0
System.Reflection.Extensions.4.0.0.0
System.Reflection.Primitives.4.0.0.0
System.Reflection.TypeExtensions.4.0.0.0
System.Resources.ResourceManager.4.0.0.0
System.Runtime.4.0.20.0
System.Runtime.Extensions.4.0.10.0
System.Runtime.Handles.4.0.0.0
System.Runtime.InteropServices.4.0.20.0
System.Runtime.Serialization.Primitives.4.0.0.0
System.Security.Claims.0.1-alpha-build-0286
System.Security.Cryptography.4.0.0.0
System.Security.Cryptography.Encoding.4.0.0.0
System.Security.Cryptography.HashAlgorithms.SHA2.4.0.0.0
System.Security.Cryptography.RandomNumberGenerator.4.0.0.0
System.Security.Cryptography.X509Certificates.4.0.0.0
System.Security.Principal.4.0.0.0
System.Security.SecureString.4.0.0.0
System.Text.Encoding.4.0.10.0
System.Text.Encoding.4.0.20.0
System.Text.Encoding.Extensions.4.0.10.0
System.Text.RegularExpressions.4.0.0.0
System.Threading.4.0.0.0
System.Threading.Overlapped.4.0.0.0
System.Threading.Tasks.4.0.0.0
System.Threading.Tasks.4.0.10.0
System.Threading.Thread.4.0.0.0
System.Threading.ThreadPool.4.0.10.0

大量だ。。。


c:\oss\aspnet\Home\samples\HelloMvcWeb>k run
'HelloMvc' does not contain a static 'Main' method suitable for an entry point

c:\oss\aspnet\Home\samples\HelloMvcWeb>k web
Started

http://localhost:5001/ でいつもの ASP.NET MVC のシンプルな奴が表示されるはずだがエラー。
バージョン番号はきちんとメンテされていないので最新を取ってくるように変更して


c:\oss\aspnet\Home\samples\HelloMvcWeb>git diff Project.json
diff --git a/samples/HelloMvc/project.json b/samples/HelloMvc/project.json
index ead5eca..23b0450 100644
--- a/samples/HelloMvc/project.json
+++ b/samples/HelloMvc/project.json
@@ -1,10 +1,10 @@
{
"version": "0.1-alpha-*",
"dependencies": {
- "Microsoft.AspNet.Diagnostics": "0.1-alpha-build-0682",
- "Microsoft.AspNet.Hosting": "0.1-alpha-build-0572",
- "Microsoft.AspNet.Mvc": "0.1-alpha-build-1268",
- "Microsoft.AspNet.Server.WebListener": "0.1-alpha-build-0520"
+ "Microsoft.AspNet.Diagnostics": "0.1-alpha-build-*",
+ "Microsoft.AspNet.Hosting": "0.1-alpha-build-*",
+ "Microsoft.AspNet.Mvc": "0.1-alpha-build-*",
+ "Microsoft.AspNet.Server.WebListener": "0.1-alpha-build-*"
},
"commands": {
"web": "Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001"

c:\oss\aspnet\Home\samples\HelloMvcWeb>kpm restore
c:\oss\aspnet\Home\samples\HelloMvcWeb>k web
Started

http://localhost:5001/ でいつもの ASP.NET MVC のシンプルな奴が表示された。


c:\oss\aspnet\Home\samples\HelloMvc>dir /S /B /A-D
c:\oss\aspnet\Home\samples\HelloMvc\project.json
c:\oss\aspnet\Home\samples\HelloMvc\Startup.cs
c:\oss\aspnet\Home\samples\HelloMvc\Controllers\HomeController.cs
c:\oss\aspnet\Home\samples\HelloMvc\Models\User.cs
c:\oss\aspnet\Home\samples\HelloMvc\Views\Home\Index.cshtml
c:\oss\aspnet\Home\samples\HelloMvc\Views\Shared\_Layout.cshtml
c:\oss\aspnet\Home\samples\HelloMvc>type project.json
{
"version": "0.1-alpha-*",
"dependencies": {
"Microsoft.AspNet.Diagnostics": "0.1-alpha-build-*",
"Microsoft.AspNet.Hosting": "0.1-alpha-build-*",
"Microsoft.AspNet.Mvc": "0.1-alpha-build-*",
"Microsoft.AspNet.Server.WebListener": "0.1-alpha-build-*"
},
"commands": {
"web": "Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001"
},
"configurations": {
"net45": {
"dependencies": {
"System.Runtime": "",
"System.ComponentModel.DataAnnotations": ""
}
},
"k10": {}
}
}
c:\oss\aspnet\Home\samples\HelloMvc>type Startup.cs
using Microsoft.AspNet.Routing;
using Microsoft.AspNet.Builder;
using Microsoft.Framework.DependencyInjection;

namespace KWebStartup
{
public class Startup
{
public void Configure(IBuilder app)
{
app.UseErrorPage();

app.UseServices(services =>
{
services.AddMvc();
});

app.UseMvc();

app.UseWelcomePage();
}
}
}
c:\oss\aspnet\Home\samples\HelloMvc>type Controllers\HomeController.cs
using Microsoft.AspNet.Mvc;
using MvcSample.Web.Models;

namespace MvcSample.Web
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View(User());
}

public User User()
{
User user = new User()
{
Name = "My name",
Address = "My address"
};

return user;
}
}
}

相変わらずファイルはBOMつきだな。。。。
Startup で DependencyInjection がいる。AddMvc でAsp.NET MVC で必要なクラスや Controller もコンテナに登録にいってる。
ActionResultからIActionResultに変更。
ViewBagは健在。Razor の構文はかわりなしな感じ。

Global.asax、Web.Conig がいない。
実際には https://github.com/aspnet/MusicStore/tree/dev/src/MusicStore をみると Web.Conig はいる。IISでうごかすためにもこれは残るのだろう。Razor も async/await している。。。