渋谷の片隅で吠える

エンジニアをしています。主にscalaとjavaを書いています。

Macにfabricを入れてherokuへデプロイしたい時につまずいた。

やろうとした事

fablicを使ってherokuにある本番へデプロイをしたい

環境

OS: OS X El Capitan 10.11.6 python : 2.7.0

pipをインストール

まずこのPCにはpipが入っていなかったのでpipをダウンロード。

sudo easy_install pip

動作確認

pip -V
pip 9.0.1 from /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (python 2.7)

fabricをインストール

pip install Fabric

インストールの確認

pip freeze

asn1crypto==0.24.0
bcrypt==3.1.4
cffi==1.11.2
cryptography==2.1.4
enum34==1.1.6
Fabric==1.14.0
idna==2.6
ipaddress==1.0.19
paramiko==2.4.0
pyasn1==0.4.2
pycparser==2.18
PyNaCl==1.2.1
six==1.11.0

無事にfabricが入ったのでfabfileをつくる

デプロイのためのfabfile.pyをつくる

# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.decorators import runs_once
from datetime import datetime

env.hosts = ['00.000.000.0']
env.user = 'ec2-user'
env.key_filename = '~/.ssh/deploy_file.pem'
env.project_root = '../'
env.build_path = project_path
env.config_path = project_conf_path
env.branch = 'master'
env.archive = ''
env.server_api_dir = path

@task
@runs_once
def build_play():
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    env.archive = "api-%(timestamp)s.tar.gz" % {"timestamp":timestamp}
    with lcd(env.project_root):
         local("/usr/local/bin/activator clean stage")
         local("tar cvfz %(archive)s target" % {"archive":env.archive})
         put("%(archive)s" % {"archive":env.archive}, "%(dir)s/" % {"dir" : env.server_api_dir})
         local("rm %(archive)s" % {"archive":env.archive})
@task
@runs_once
def unck():
    run("sudo rm -Rf %(dir)s/target" % {"dir" : env.server_api_dir})
    run("tar zxvf %(dir)s/%(archive)s -C %(dir)s" % {"dir" : env.server_api_dir, "archive":env.archive})

@task
@runs_once
def deploy(branch=env.branch):
    execute(build_play)
    execute(unpack)

ここまでは順調

問題発生

fabricは問題なくお登勢てるにもかかわらずfabコマンドが動かない

deployディレクトリに移動してfab deployを叩くも失敗 どうしたもんか。。。 heroku側の設定も問題ないし、何より上のコマンドで先輩はdeployできている。

もうちょい調べる必要がありそうです。

scalaを勉強するにあたって使ったサイトとかをまとめる

基礎的な読み物

dowango新卒エンジニア向けの研修資料
対象/初学者

無料で読めてかつ基本的な概念や文法がよくまとまっているのでオススメです。 各章の最後に練習問題が付いているので理解度のチェックが簡単にできるのと難しい表現を使わないので読むのが億劫になりません。 基本の文法を覚えるなら日本語のドキュメントの中で一番いいかも。 2時間もあれば全部目を通せるのでなんども読み返す事ができていいです。

Scala公式サイト(※英語、一部日本語対応)
対象/javaからscalaに乗り換えの方、ある程度関数言語を知ってる方

本家のドキュメントです。 丁寧にガイドが書かれているのですが、個人的にちょっと読むのがしんどいです。 あと基礎的な言語に関する知識を必要とするので初めのうちのとりあえず動く感覚が欲しい時には向かない印象です。 メソッドや文法なんかは間違いないのでちょくちょく見に来ましょう。

scala school
対象/初心者、英語読むのが億劫でない人

割と実践的な内容を踏まえた包括的なサイトです。 twitterが自社での使い方を踏まえた上でカリキュラムを組んでいるので実践に近い感覚です。 ただほとんど英語なんで翻訳とかしながらやったりするにはちょっとしんどいかなとおもうのですが英語余裕な人はここから入門で十分ですね。

実践

paizaの無料のコンテンツをこなしたくらいです。 シンタックスとかツッコミをくれるのでいいですね。

僕は動かないと理解が深まらないんでguthubを徘徊してscalaのコードを手元で写経して動かすとかをしていました。 まだまだ勉強中なので続けます。

勉強に使った環境

動かしてなんぼだと思うので砂場を用意してサンプルの挙動を確認していました。

Mac OSX 
IDE :intellij idea
playFramework2.5 scala

playFrameworkのscala worksheetと呼ばれる機能があるのでそれを使います。 リアルタイムにコンパイルの結果を返してくれるので非常に学習がはかどりました。

おまけ

Effective scala
twitterがまとめたscalaシンタックスのルールや実践コードでこういう書き方をするといいよ的なものをまとめたものです。

これに沿って書けば概ねルールを踏襲したシンタックスになるので、 お行儀の悪いコードにならなくていいと思います。

今度scala worksheetの使い方とかをまとめます。