Kotlinはなかなか良いね

昔、KotlinがGoogleAndroid開発で正式対応されて、なんで新しい言語がそんなにみんな好きなの?と言っていた自分ですが、最近Kotlinを触り始め、これは良いと思ってしまいました。

その頃は、ちょっと不便だけどJavaでそこそこ満足しており、別に新しい言語に対応しなくてもいいんじゃね?と思っていたのですが、考えを訂正します。 Javaで開発している皆さん、Kotlinも使ってみましょう。

きっとこの言語の素晴らしさがわかるはずです。

パフォーマンスはJava系フレームワーク最強

Webフレームワークのベンチマークを掲載しているサイトを発見しました。Web Framework benchmarksというサイトです。

このサイトによると、Java系(Java/Kotlin)フレームワークは速度的に最強ということでした。 最近、速度が速いとか、関数型が好き?、流行っているとかいう理由でGo言語を使うプロジェクトも散見されますが、早さを理由に、Go言語を使う理由はないですね。

個人的にはJavaやKotlin好きですし、長年の実績があり安定したライブラリも多く、Kotlinに関しては文法も現代的で洗練されています。 よく分からないのに無理してGo言語使う理由ってなんだろう?とか思っちゃいます。

Windows 10でVagrantの仮想マシン起動時にマウントで失敗

Windows 10でVagrantを使って仮想マシンを起動したとき、/vagrantフォルダをcifsでマウントしようとして失敗します。VagrantのプロバイダーはHyper-Vです。

==> default: Mounting SMB shared folders...
    default: E:/vagrant/Debian => /vagrant
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t cifs -o uid=1000,gid=1000,sec=ntlm,credentials=/etc/smb_creds_06fc4a57cab5868f1a4965e043cd4a19 //192.168.1.6/06fc4a57cab5868f1a4965e043cd4a19 /vagrant

The error output from the last command was:

mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

どうも、Windows 10 Fall Creators Updateでsmb v1が無効にされたのが原因のようです。 以下のサイトに解決方法が出ていて、本質的なものかどうか疑問なのですが、Windowsでsmb v1を有効にして解決できました。

https://github.com/docksal/docksal/issues/382

シリーズ:WindowsでJavaの開発環境を構築する

会社ではMacを主に使用しているのですが、家ではメモリをたっぷり積んでリーズナブルなマシンがWindowsしかなく、仕方なく使っています。 今は、Docker for WindowsWindows Subsystem for Linuxが登場し、だいぶ使えるようになってきたので、Windowsを使った場合のWeb開発環境を構築するにあたり、記録したい項目についてこのブログでシリーズとして書いていきます。

Ubuntuのtimezoneを変更する

Windows Subsystem for LinuxUbuntuを使用した場合、デフォルトのtimezoneはNoneに設定されているようです。 これを変更するには、以下のコマンドを実行します。

sudo dpkg-reconfigure tzdata

設定画面が表示されますのでAsia -> Tokyo を選択します。

Debian StretchのBOXファイルを作成する

Debian Stretchが2017年6月17日にリリースされました。早速BOXファイルを作成してみましょう。

1. Virtual BoxにDebianをインストールする。

Virtual BOXにベースとなるDebian Stretchをインストールします。インストール時に注意することは以下となります。

  • 初期ユーザとして、vagrantユーザを作成する。パスワードは"vagrant"にする。
  • sshdをインストールする

2. 新しく作成した仮想マシンにログイン

新しく作成した仮想マシンにrootユーザでログインします。

3. sudo/curlをインストー

sudo/curlをインストールします。

root@debian:~# apt install sudo curl

4. sudoの設定

vagrantユーザがsudoできるようにします。 まず、visudoコマンドを実行します。

root@debian:~# visudo

以下の行を追加して保存&終了します。

vagrant ALL=(ALL)     NOPASSWD: ALL

4. sshキーのインストー

vagrantユーザのsshキーをインストールします。

一旦ログアウトし、vagrant ユーザでログインし、以下のコマンドを実行します。 やっていることは、vagrantユーザの公開鍵をインストールしています。これをしないと、vagrant仮想マシンにログインして仮想マシンの制御を行えません。

vagrant@debian:~$ mkdir .ssh
vagrant@debian:~$ chmod 0700 ~/.ssh
vagrant@debian:~$ curl -k -L -o ~/.ssh/authorized_keys  https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
vagrant@debian:~$ chmod 0600 ~/.ssh/authorized_keys

5. VirtualBox の Guest Additions をインストー

VirtualBoxのGuest Addtionsをインストールします。

Virtual BoxのGuest Addtionsをマウント

Virtual Boxで、インストールした現在準備中の仮想マシンウインドウを選択し、「デバイス」メニューから、「Guest Additions CDイメージの挿入」を選択します。こうすると、Guest AddtionsのCDが選択された仮想マシンに挿入されます。

CDのマウント

以下のようにしてVirtual Box Guest AddtionsのCDをマウントします。

root@debian:~#  mount -t iso9660 /dev/cdrom /mnt

Guest Addtionsをセットアップ

以下のコマンドでセットアップします。

root@debian:~# apt-get install build-essential module-assistant dkms
root@debian:~# /mnt/VBoxLinuxAdditions.run

その他セットアップ

以上で必要最小限のセットアップはできました。お好みでboxファイルに含めておきたい追加のセットアップをしておきます。

OSを終了

セットアップが終了したらOSを終了します。

root@debian:~# shutdown -h now

BOXファイルの作成

ホストマシン上でBOXファイルを作成ます。 以下コマンドを実行します。 “Debian-stretch"の部分は、Virtual Boxの仮想マシン名です。

$ vagrant package --base Debian-stretch

作成したBOXファイルを登録

作成したBOXファイルをVagrantが使えるように登録します。

vagrant box add yakubouzu/debian-stretch package.box

追加後、一覧を表すると登録したBOXが表示されるはずです。

$ vagrant box list
yakubouzu/debian-stretch (virtualbox, 0)

試しに起動

作ったBOXファイルを使ってvagrant仮想マシンを作成してみます。

まずは設定ファイルであるVagrantfileの作成をvagrant initコマンドで行います。

$ vagrant init yakubouzu/debian-stretch
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

作成できたら仮想マシンを起動。

$ vagrant up

無事エラーが表示されず起動すればOKです。

「Kotlin」がAndroidの正式な開発言語と言うけれど

「Kotlin」がAndroidの正式な開発言語になったらしいが、なんでKotlinのようなマイナー言語が正式な開発言語になるのか不思議。 確かにJVM上で動くのでJavaと相性がいいとは思うけど、わざわざ開発リソースを当ててサポートする必要がるのだろうか?

世の中、GoだとかScalaだとか、マイナーな言語になんだかんだ理由をつけて採用しているプロジェクトがあるけれど、結局のところ新し物好きなだけなのではないか。 Javaとか、RubyPythonC#でいいんじゃない?言語仕様の習得に苦労するんなら、もっと他にやるべきことあるんでない?と思うオジさんなのでした。