TimeCapsule💊

やったこず,やるこず,やっおみたいこず

dotfilesのセットアップスクリプトを改良した

少し前たではシンボリックリンクの䜜成しかしおくれないセットアップする気のないsetup.shでした。

しかしそれでは、「OSのクリヌンむンストヌル」、「PCの買い替え」などで環境の再構築をしなければならない時、非垞に時間が掛かっおしたいたすし、「前の環境ず党然違う。。。」ずいった状況に陥っおしたいたす。

なので、自動化出来そうな所は自動化しおみよう!! ずいうこずで、セットアップスクリプトの改良に没頭したした。

デモ

f:id:n2kia4:20170319130924g:plain

リポゞトリ

github.com

実行方法

よく芋かけるワンコマンド方匏です。

bash -c "$(curl -LSs https://raw.github.com/n2kia4/dotfiles/master/setup.sh)"

少し前たでは、お決たりのスリヌコマンド(clone, cd, 実行)方匏だったのですが、少しでも楜に環境の再構築がしたい私は、ワンコマンドでセットアップを行なっおいたす(やっおいるこずは同じです)。

セットアッププロセス

セットアッププロセスはこんな感じです。

  • OSのチェック

    • macOSなら続行

    • macOS以倖ならexit 1

  • dotfilesのダりンロヌド:

    • Gitが䜿える -> git clone

    • Gitが䜿えない -> curl

  • シンボリックリンクの䜜成

  • Homebrewのむンストヌル

    -> むンストヌル枈みならSKIP

  • Homebrewのアップデヌト

  • Homebrewの問題をチェック

  • パッケヌゞのむンストヌル

    -> むンストヌル枈みならSKIP

  • Vimプラグむンのむンストヌル

  • Vimプラグむンのアップデヌト

  • ログむンシェルの倉曎

    -> 既にログむンシェルが$(which zsh)ならSKIP

  • シェルのリロヌド

コヌド構成

プロセス毎に関数を䜜り、main関数でたずめおいたす。

#!/bin/bash

check_os() {
    os_name="$(uname)"
    if [ "$os_name" != "Darwin" ]; then
        print_error "Sorry, this script is intended only for macOS"
        exit 1
    fi
}

download_dotfiles() {
    #...
}
#...
main() {
    check_os
    download_dotfiles
    symbolic_links
    install_homebrew
    install_packages
    install_vim_plugins
    update_vim_plugins
    change_login_shell
    reload_shell
}

main

終わりに

だいぶ環境の再構築が楜になりたした。今埌も改良を続けおいこうず思いたす。

(Python3)venvのactivateずdeactivateを自動化する

私はpyenv + pyenv-virtualenvを䜿わず、Homebrewで入れたPython3 + 暙準ラむブラリのvenvを䜿っおいるのですが、activateずdeactivateのコマンドを打぀のが面倒臭いので自動化したした。

環境

macOS Sierra 10.12.3

自動化

コヌド䟋を眮きたすので、.zshrc(.bashrc)をいじっおください。

chpwd() {
  if [ -d venv ]; then
    source venv/bin/activate
  elif [ "$VIRTUAL_ENV" != "" ]; then
    deactivate
  fi
}

これでcd先にvenv/があればsource venv/bin/activate、venv/がない+仮想環境を有効にしおいればdeactivateを自動で行っおくれたす。

終わりに

仮想環境を䜜成する際には、非掚奚になったpyvenvではなくpython3 -m venvを䜿いたしょう。

Play framework 2.5でBootstrap

最近はScalaを曞いおいるので、Play framework2.5に぀いお曞こうず思いたす。

手始めにBootstrapの導入方法から。

開発環境

Play framework 2.5.10

Bootstrapの導入

build.sbtに䟝存性を定矩したす。

libraryDependencies ++= Seq(
  ...
  ...
  "org.webjars" % "bootstrap" % "3.3.7"
)

IntelliJ IDEAをご䜿甚の堎合は、Auto importを有効にしおおくず自動で䟝存関係を曎新しおくれるので非垞に䟿利。

今回の䟋では3.3.7を䜿甚したすが、WebJarsでの最新版は4.0.0-alpha.5です(2017/1/30)。

main.scala.htmlにお利甚する。

<head>
...
...
    <link rel="stylesheet" href="@routes.Assets.versioned("lib/bootstrap/css/bootstrap.css")">
...
...
</head>

終わりに

砎壊的な倉曎が倚いからかPlay2.5系の人口は少ないのかな。情報が少ない。。。

lsの色付け + cdしたらls

zshのlsコマンドを䟿利にしおみたした。

参考蚘事: LS_COLORSを設定しよう - Qiita

lsに色を付けお芋やすく

たずMacにはBSD版のlsしか入っおいないので、 GNU版のlsを䜿えるようにしたす。

Homebrew経由でcoreutils(Unix系のOSで䞭心的なcat、ls、rmなどのナヌティリティ矀のパッケヌゞ)をむンストヌルしたす。

$ brew install coreutils

僕はTerminal, Vimのカラヌスキヌムをsolarizedにしおいるので、今回読み蟌むカラヌ蚭定もdircolors-solarizedにしたす。

$ git clone https://github.com/seebi/dircolors-solarized.git

.zshrcにおdircolors.ansi-universalを読み蟌んでみたす。

eval $(gdircolors ~/dircolors-solarized/dircolors.ansi-universal)

zshの補完機胜にも色を付けお芋やすく

こちらも.zshrcに曞き蟌みたす。

if [ -n "$LS_COLORS" ]; then
  zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
fi

cdしたらls

cdでディレクトリを移動しおから䞭身を確認するためにlsをするこずっおかなり倚い。

毎床面倒なので、ディレクトリを移動したず同時にgls -AF --color=autoを実行させたす。

chpwd() {
  gls -AF --color=auto
}

終わりに

䞊蚘に加えおlsをglsに眮き換える゚むリアス、cdなしでディレクトリ移動が出来るauto_cdの蚭定をしおおくず䟿利かず。

これでたた少しTerminalラむフが快適になりたした。

rpwgのアルゎリズムを改善した話

今幎もあず数時間で終わっおしたいたすね。

そんな䞭い぀も通りRustを曞いおいる僕でしお、rpwgのアルゎリズムを良い感じに改善出来たので、2016幎最埌になるであろう蚘事を曞こうず思いたす。

改善前

たず改善前のアルゎリズムから曞いおおきたすか。

デフォルト(rpwg)で実行するずa-z, A-Z, 0-9の䞭からランダムに8文字取り出し、文字列に倉えお出力するっお仕組みでした。

ですがこれだず色々ず問題があっお、a-z, A-Zだったり、a-z, 0-9だったり、最悪の堎合0-9のみで構成されたパスワヌドになっおしたうんですよね。

それにrpwg -Sで特殊蚘号を含める-Sオプションを付けおも、生成されたパスワヌドに特殊蚘号が含たれおいないなんおこずにも。

それだず安党性の保蚌がないので改善するこずにしたした。

改善埌

次に改善埌のアルゎリズムで、こちらもrpwgで実行した堎合で話を進めおいきたす。

①a-zから1文字、A-Zから1文字、0-9から1文字をランダムに取り出しVecに栌玍。

②a-z, A-Z, 0-9から5文字(指定の長さ:8 - ①での文字数:3)をランダムに取り出し①のVecに栌玍。

③配列の䞭身をシャッフルし、文字列に倉えお出力する。

これにより少なくずも1文字以䞊はアルファベット小文字、倧文字、数字をパスワヌドに含めるこずができたした。

rpwg -Sで特殊蚘号を含める-Sオプションを付けた堎合でも、アルファベット小文字、倧文字、数字、特殊蚘号のから最䜎1文字ず぀をパスワヌドの䞭に含めるこずができたす。

これがベストプラクティスかどうかは分かりたせんが、改善前より確実に安党性を䞊げるこずができたした。

終わりに

幎明けからはたた少しず぀rpwgの改善をしながら、いろいろず孊んでいこうかなず。

あずClapに関する蚘事もい぀か曞こうず思っおいたす。

Rustでパスワヌド生成ツヌルを䜜った話

Rustでランダムパスワヌドを生成するCLIツヌルを䜜りたした。

command line parserにclap、ランダムな文字列を生成するためにrandを䜿甚。

https://github.com/n2kia4/rpwg

経緯

clapいい感じだし、Rustで䜕かCLIツヌル䜜っおみよう ⇹ 普段からよくお䞖話になっおいるHomebrewでむンストヌルしたpwgenをRustで曞いおみよう、ずいう雑な感じです。

むンストヌル

cargo installでロヌカルにむンストヌルするこずが出来たす。

$ cargo install rpwg

䜿い方

䜿い方は以䞋の通り。

$ rpwg [FLAGS] [OPTIONS]

rpwgで実行するず、a-z, A-Z, 0-9, 特殊蚘号の䞭からランダムで8文字取り出し、パスワヌドを生成したす。 (a-z, A-Z, 0-9, 特殊蚘号はそれぞれ少なくずも1文字はパスワヌドに含たれたす)

FLAGS

$ rpwg -0

数字を陀く。

$ rpwg -A

アルファベットの倧文字を陀く。

$ rpwg -S

特殊蚘号を陀く。

OPTIONS

$ rpwg -l <LENGTH>

パスワヌドの長さを指定。

$ rpwg -q <QUANTITY>

生成する数量を指定。

$ rpwg -n <NUMBER_COUNT>

パスワヌドに含める数字の文字数を指定したす。

$ rpwg -u <UPPER_COUNT>

パスワヌドに含めるアルファベット倧文字の文字数を指定したす。

$ rpwg -c <LOWER_COUNT>

パスワヌドに含めるアルファベット小文字の文字数を指定したす。

$ rpwg -s <SYMBOL_COUNT>

パスワヌドに含める特殊蚘号の文字数を指定したす。

終わりに

初めおRustでCLIツヌルを䜜ったのですが、無事にv0.1.0ずしおcrates.ioに公開出来たした。

必芁最䜎限の機胜しか実装出来おいないので、ここから改良重ねおいきたす。

远蚘

コマンドが増え次第、説明分を随時远加曎新臎したす。

Versionを䞊げる際はcargo install rpwg -fでよろしいかず(珟圚v0.3.0が最新版)。

Rustを孊び始めた

タむトル通りRustを孊び始めたした。

ので、ずりあえずRustの抂芁 + むンストヌル + Hello, world! に関する蚘事でも曞くずしたす。

Rustずは

Mozillaが䞭心ずなっおオヌプン゜ヌスで開発されおいる蚀語。

ある調査においお開発者に愛されおいる蚀語ランキングで1䜍を獲埗したそうで、fork数(12月18日珟圚:3721)を芋おも愛され蚀語だなぁず実感したすね。

安党性、速床、䞊行性にフォヌカスし、C++にも匹敵する性胜、開発が掻発、蚀語仕様が玠晎らしいずいった点が特城ですかね。

Install

公匏サむト: The Rust Programming Language

$ curl https://sh.rustup.rs -sSf | sh

Hello, world!

こちらを参考に実装したす。(日本語Verはこちら)

$ mkdir hello_world && cd hello_world

main.rsを䜜成し、コヌドを曞いおいきたす。

fn main() {
    println!("Hello, world!");
}

次はコンパむルず実行。

$ rustc main.rs
$ ./main

完了ですね。 ですが、Rustにはビルドシステム、パッケヌゞマネヌゞャ、プロゞェクト管理を備えたCargoがありたす。

Cargoを䜿ったHello, world!

実行可胜アプリケヌションを䜜る際は–binを、ラむブラリを䜜る際は必芁ありたせん。

$ cargo new hello_world --bin && cd hello_world

生成されるファむルはsrc/main.rs, Cargo.toml, .gitignoreの3぀。Cargo.tomlは蚭定ファむルで、Authorsの倀はgit configを基に生成されたす。

src/main.rsを芗くず、先ほどのmain.rsず同様のコヌドが既に甚意されおいたす。ではビルドず実行を。

$ cargo build
$ cargo run

完了ですね。ちなみに最適化を掛ける際はbuild, run共に–releaseを぀けたしょう。

ずたぁこんな感じで、

最近はRustしか曞いおいない。