TechnTack

エンジニアの日常

Scala楽しい

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

ScalaHome - 2.5.x を同時に読み進めていたのだが、 Scalaの文法やクセを理解しないままPlay frameworkの仕様を読み進めていくのには流石に限界を感じてきたので、現状は本の方をメインに読み進めている。

1日の時間のうち、家庭や仕事の時間を抜くと以外と取り組める時間は限られているのだがようやく半分ほど読み終えた。

ここまでで読み進めた感触としては、 これまでのどの言語よりもやりたいことが出来そうと感じている。

MVCではなく...

Scala + Playの開発環境も整ったのでボチボチと

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

Home - 2.4.x を読み進めている。
(Playは2.5系を利用しているが日本語ドキュメントがない為、2.4系のドキュメントを見つつ2.5系との差分を確認している)

まだ関数型プログラミングの旨みとかPlay frameworkの特性とかは理解している最中だが、アーキテクチャMVCでもMVVMでもなく「 iOS Clean Architecture 」を採用することにした。

GitHubリポジトリへのSSHアクセスについて

これからScalaで作成していった物はGitHubリポジトリ管理することにしました。

Windowsを使用しているのでクライアントツールは以下を利用します。

上記ツールのインストール手順は記載しませんが、 それぞれ上記リンクよりインストーラをダウンロードしました。

以降は、上記がそれぞれインストールされている前提で記載しています。

公開鍵・秘密鍵の作成

まずはGitBushを起動してください。
起動が終わったら以下のコマンドで「.sshディレクトリを作成してカレントディレクトリを変更します。

$ mkdir ~/.ssh
$ cd ~/.ssh/

続いて鍵を生成します。

$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/%ユーザ名%/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

対話形式で質問が3回ありますが、すべて何も入力せずにEnterで鍵が作成されます。
※鍵の名称を変更したり、パスフレーズを設定したりする場合は適宜値を入力する必要があります。

上記と同様のコマンドを実行していれば、この時点で以下のファイルが作成されています。

id_rsa      :秘密鍵
id_rsa.pub    :公開鍵

GitHubへのSSH keysへの公開鍵の登録

まずは自身のGitHubの設定ページを表示して、画面左にあるメニューより「 SSH and GPG keys 」を選択します。
選択するとSSH keysが表示されるので「 New SSH Key 」ボタンをクリックしてください。

f:id:techn_tack:20170225235912p:plain

クリックすると上記が表示されますので、まずは「Title」に任意のタイトルを設定します。
(後々、何の鍵か分かるような名前であれば問題ありません)

続いて、GitBushにて以下のコマンドで公開鍵の中身をコピーします。

$ clip < ~/.ssh/id_rsa.pub
※上記で作成した公開鍵を指定してください。

コピーした物をGitHub上の「 Key 」に設定して、「Add SSH Key」ボタンをクリックすると公開鍵の登録が完了します。

上記までで作成した秘密鍵をTortoiseGitで扱う為に「 ppkファイル 」に変換

上記までで作成した秘密鍵(id_rsa)をppkファイルに変換するためには、
TortoiseGitインストール時に同時にインストールされる「 puttygen.exe 」を利用します。
(デフォルトのインストールパスであれば「C:\Program Files\TortoiseGit\bin」にあります)

起動すると以下ダイアログが表示されます。 f:id:techn_tack:20170226001111p:plain

続いて「File -> Load private key」で先ほど作成した秘密鍵(id_rsa)を開きます。
(選択できる拡張子が「.ppk」になっているので「All Files (.)」に切り替える必要があります)

秘密鍵の読み込みが成功したら「 Save private key 」ボタンを押してppkファイルを作成します。
(必要であれば「passphrase」も入力してください)

ここまでで、秘密鍵と同ディレクトリにppkファイルが作成完了です。

GitHubリポジトリからclone

GitHubよりリポジトリパスをコピーしたら、任意のディレクトリでGit Cloneします。
TortoiseGitの「Git Clone...」を選択するとGit Cloneダイアログが表示されます。

ダイアログ中のURLにリポジトリURLを設定し、
ダイアログの中心付近にある「 Load Putty Key 」に先ほど作成したppkファイルを設定すると無事Cloneできます。

最後に...

ここまででGitHubよりCloneができました。
あとは、適時コミットやプッシュを行っていくだけとなります。

さて、ボチボチ開発に入っていきますかー

Scalaの開発環境の構築(Windows)

にも書いた構成でScalaの開発環境の構築を行います。
(OSはWindows10 64bit)


目次


JDK インストール

java -version
javac -version

Scala インストール

Download | The Scala Programming Languageを確認したところ、 以下から好きな方法を選んでねって書いてあった。

Scala単体でのインストール
「sbtをインストール
Scala IDEsをインストール

と3つ記載があるが、今回は後述する「Activator」でScalaもインストールされるのでScala単体でのインストールは行いません。
※コンソールからScalaを個別に実行したい場合などは個別にインストールする必要があります。

Play framework インストール

Play frameworkはsbtをカスタマイズしたActivator(LightBend社)を利用してインストールします。
Scalaも同様)

※プロジェクトの新規作成や実行もActivatorから行います。

  • Typesafe Activatorより、最新のActivator(mini-package版)をダウンロードします。

  • ダウンロードが完了したら書き込み権限のある任意のディレクトリにてダウンロードしたZip(typesafe-activator-1.3.12-minimal.zip)を解凍します。
    解凍が終わったら、「activator.bat」のあるディレクトリパスをシステム環境変数のPathに追加します。
    ※「%解凍したパス%\typesafe-activator-1.3.12-minimal\activator-1.3.12-minimal\bin」

  • 解凍が終わったら、「%解凍したパス%\typesafe-activator-1.3.12-minimal\activator-1.3.12-minimal\bin」内にある「 activator.bat 」を実行します。
    このバッチでactivatorに必要なものがインストールされます。
    (数十分ほど時間がかかりますが、気長に待ちましょう)

    インストール後半で「Java™ Platform SE binary」の外部への通信の許可を求められますので、 これを 許可 します。
    (ローカルで確認する分であれば「プライベートネットワーク」のみで問題ありません。)

    しばらくすると以下のメッセージがコンソールに表示され、「http://127.0.0.1:8888/home」でブラウザが立ち上がります。
    [info] play - Application started (Prod)
    [info] play - Listening for HTTP on /127.0.0.1:8888

    立ち上がったブラウザからもプロジェクトの作成などが行えるのですが、
    今回はコンソールとIDEを利用して開発を進めるので、これは利用しません。

    なお、ここまででインストールは完了となりますので、起動されたブラウザとコンソールは閉じてください。
    (コンソールは「ctrl + c」で止めます)

    activatorのコマンドに関しては、コンソール上で activator help と入力し実行することで確認できます。

  • インストールが完了したので、プロジェクトを新規に作成してみます。
    プロジェクトの新規作成はコンソールから以下のコマンドで行います。

activator new testapp play-scala
※プロジェクトを作成する前にカレントディレクトリを
 プロジェクトを作成するディレクトリに移動しておいてください。
※「testapp」はプロジェクト名

activatorコマンドで「sbtconfig.txt が見つかりません。」と表示される場合は
 「%解凍したパス%\typesafe-activator-1.3.12-minimal\activator-1.3.12-minimal\conf」に「sbtconfig.txt」を作成してください。

以下はファイルの中身

# Set the java args to high

-Dfile.encoding=UTF-8

-Xmx512M

# -XX:MaxPermSize=256m

-XX:ReservedCodeCacheSize=128m

# Set the extra SBT options

-Dsbt.log.format=true
  • プロジェクトの作成が完了したら、起動してみます。
    まずはカレントディレクトリをプロジェクト内に移動してください。
cd testapp

移動が完了したら、実行してみます。

activator run
※初回起動では、必要なファイルのインストールも同時に行われるため、数十分ほどかかります。
 (ScalaやPlay frameworkなど)

しばらくすると以下のメッセージが表示されますので、表示されたら「http://127.0.0.1:9000」で実行したアプリを確認できます。
(ブラウザからアクセスするとScalaコンパイルが動くので、初回は時間がかかります)

--- (Running the application, auto-reloading is enable) ---
[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)

ブラウザの画面 f:id:techn_tack:20170222230045p:plain

IntelliJ IDEA (IDE) インストール

  • IntelliJ IDEA the Java IDEよりインストーラをダウンロードします。 (今回は無料の Community Edition を選択)

  • 上記でダウンロードしたインストーラ(ideaIC-2016.3.4.exe)を実行し、インストールを行います。
    (2017/02/20 時点)

  • インストールが完了したら、IntelliJを起動します。 起動すると以前の設定を引く次ぐかどうかのダイアログが表示されますが、 初めてのインストールなので
    「I do not have a previous version of IntelliJ IDEA or I do not want to import my settings」
    側にチェックをいれてOKボタンを押します。 (以前の設定を引き継がない場合も同様)

    Plivacy PolicyをAcceptして、「 Download featured plugins 」まで進みます。

    ここで「 Scala plugin 」が表示されていますので、これをインストールします。

    インストールが完了したら「Start using IntelliJ IDEA」ボタンを押下して、 無事起動完了となります。
    (次回以降は上記手順はスキップされます。)

IntelliJ へのプロジェクトのインポート

  • 起動画面から「Import Project」を選択します。 f:id:techn_tack:20170222235714p:plain

  • プロジェクトディレクトリを選択するダイアログが表示されるので、
    上記にて作成したプロジェクトディレクトリを選択し、OKボタンを押下します。
    ※上記で作成したディレクトリの場合は「%任意のディレクトリ%\testapp」

  • 次ページでは「 Import project from external model 」にチェックをし、
    SBT 」を選択して、Nextを押下します。

  • 次のインポートオプションを選択する画面では、
     「Use auto-import」
     「Create directories for empty content roots automatically」
    にチェックを入れ、「Project SDK」については「New -> JDK」でPC内のJDKを検索して
    パスを表示してくれるので対象のJDKを選択して、Finishボタンを押下します。

  • しばらくすると「SBT Project Data to Import」ダイアログが表示されますが、
    そのままOKボタンを押下します。

f:id:techn_tack:20170223002058p:plain

ここまででインポート完了です。
無事インポートが終わっていればIntelliJが表示されます。

なお、画面右下で「2 Processes running…」と表示されている間は、
インデックス作成とリフレッシュが動作していますので、その間はPCの負荷が高くなります。(重たくなる)

※「2 Processes running…」が消えた後も、「Indexing…」が表示されている間はアクションを利用できません。

IntelliJを使用したリモートデバッグ

IntelliJ Ultimate」を利用している場合は、
上述しているプロジェクトのインポートから含めてActivatorと連携できるはずなので、もっと簡単にできる筈です。

ここではCommunity Editionの場合の説明を記載します。
(インデックス作成などが終わっている前提)

  • 「Edit Configurations」からデバッグ設定を開いて、 f:id:techn_tack:20170223005257p:plain

デバッグ設定ダイアログが開いたら、ダイアログ左上の「+」ボタンを押下して、「Remote」を選択します。
選択するとリモートデバッグの設定内容が表示されるので、ダイアログ上部の「Name」を入力して、Applyボタンを押下してください。
(その他の設定はデフォルト値のままで問題ありませんが、必要であればポート等を変更してください)

  • Community EditionではActivatorでデバッグ起動している物に対してリモートデバッグ接続を行う必要があるので、
    まずは以下のコマンドでデバッグ起動を行います。
activator -jvm-debug 5005 run

起動したらIntelliJ右上のプルダウンで上記で作成した物を選択し、虫アイコンをクリックします。 f:id:techn_tack:20170223231959p:plain

IntelliJのコンソールに以下のメッセージが表示されたら、リモートデバッグ成功です。

Connected to the target VM, address: 'localhost:5005', transport: 'socket'

あとは、好きな箇所にブレークポイントを配置して、確認してみてください。

最後に…

仕事が終わってからの隙間時間でポチポチ進めており、
纏まった時間をなかなか取れないので思うようには進みませんが、
今のところ少しづつでも楽しみながら進められているのでこのまま続けていこうと思います。

Scalaはじめます

仕事ではPHPを使用したWebアプリケーションや、iOS/Android向けのネイティブアプリの開発をおこなっているのだが、

「新しいことを始めたい」

「流行りに乗っかりたい」

という思いから Scala を始めてみることにした。

ネットで検索するとそこそこの情報が該当するのだが、新しい言語を勉強する時はいつも手元にリファレンスとする為の本を持つようにしている。

今回は「Scalaスケーラブルプログラミング第3版」を選びました。

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

フレームワークは色々調べた結果、「Play framework」を利用することにしました。

※正直なところ「Skinny framework」とかとも悩んだのですが、サーブレットコンテナにする必要もなかったので勢いで決めました。

また、IDEについては仕事で「Ecripse」を利用してるので別の物を利用したいって気持ちで「IntelliJ IDEA」を選択しました。

それでは、ゆるゆるとScalaに慣れ親しんでいこうと思います。