20191125のMacに関する記事は1件です。

開発環境がMacからWindowsになったときにしたこと

はじめに

オークファンの佐藤です。
2019年5月に念願かなって、開発マシンをMacからWindowsにチェンジしました!
というか、過去にがっつり使っていたThinkPadの感覚が忘れられず、タイミングを見て切り替えてもらいました。

結果として、Windows(入社前)~Mac(2017/10)~Windows(2019/5)と、OSを行き来することになったため、その体験談とツール設定を記載します。

入社時にMac環境をセットアップしたときの体験談は、昨年のアドベントカレンダー記事
開発環境がWindowsからMacになったときにしたこと
をご覧ください。

(´-`).。oO(前回は、Windowsの経験に合わせてMacをセットアップしました。今回は、Windows経験をベースにしつつ、Macでの体験と業務経験を微妙にフィードバックしてあります)

スタンダードはMacです

オークファンの開発部では、子会社も含めたグループ全体の開発業務を扱っています。
対象となるサービスの種類によって、開発環境もかなりまちまちです。
私の部署ではMacメインなので、Windows環境構築と同時に、「そもそも動くのか?」を調べながらのスタートでした。
とはいえ、エンジニアが全員Macというわけではないので(他グループはWindowsメイン)、なんとかなるだろうと期待しつつ、以下の目標をもとに環境を設定しました。

  • Macユーザーの環境を破壊しない
  • 自分が使い慣れている

Windowsで動かすためにGithub内を変更して、それをコミットして、Macユーザーの環境を壊しては本末転倒です。
Macを前提にした開発スタイルに、Windowsで合わせる形をとります。

環境について

以降の記述は、以下環境で実施したものです。

カテゴリ スペック
OS Windows 10 1809 ->1903
ハード Lenovo ThinkPad T470s
CPU Core i7-7600U
メモリ 24GB
ストレージ SSD 512GB
キーボード 日本語キーボード +TrackPoint

開発用ツール

ここでは、Git for WindowsとWSLを両方インストールします。
Git for WindowsはVagrantの起動用に、WSLは基本のシェル環境として使い分けます。

(´-`).。oO(正直冗長ですが、シェル環境は使い慣れたUbuntuの方が好きです)

(´-`).。oO(LinuxとMacのオプションが違う問題も解消できる)

Git for windows

改行コード問題

インストールオプションの注意として、checkout as-is, commit LFを選択する。
これによって、Windowsの改行コードCRLFがコミットされることはなくなります。
詳しくは後述します。

同時にGit bash(msysgit2)がインストールされます。
だいたいのLinuxコマンドが使えるため、Macのターミナルと同様に利用可能です。

Windows上のユーザーディレクトリは/c/Users/[ユーザー名]になります。

git設定

ホームディレクトリ(c:/Users/名前/)以下に.gitconfigを作成し、

[core]
    autocrlf = input
    longpaths = true
[user]
    name = Hoge Fuga
    email = xxx@example.com

のように設定します。

autocrlf

Windowsの標準改行コードであるCRLFでファイルを作っても、コミットされる成果物はLFに変換する設定です。
インストール時にオプションを選んだため、この項目は記載されているはずです。

true? input? false?

いままでこの設定をずっとtrueにしていたのですが、 Mac用のシェルスクリプトをWSLで実行する場合 、チェックアウト時点でCRLFが入ってしまうため、input or falseが適切であることに気づきました。
https://qiita.com/uggds/items/00a1974ec4f115616580

で、falseの場合はコミット時に改行コードを変換してくれないため、今度はMacユーザーに影響を与える可能性があります。
inputはCRLF -> LFに変換するので、コミットのフィルタを通す限りはMac側でも大丈夫でしょう。

longpaths

Windowsは標準で260文字までのパスしか受け付けません。
chef関係など、階層が深かったりファイル名が長かったりで、ディレクトリが引っかかることがあるため、設定を追加します。
このあたり、確かにMacでは出会わない事象ですね。
https://qiita.com/pollenjp/items/8c70a5b55d46c1f03728

ssh設定

Git bashからmkdir ~/.ssh/ し、中に鍵を作成します。

config

PHPのライブラリ取得用に使うcomposerの一部で、ssh://github.com/xxxx/hoge.git 形式で記載されたリポジトリが書かれていることがあります。
これを処理するために、configを記載します。

~/.ssh/config
Host github.com
  HostName github.com
  User git

Windows Subsystem for Linux(WSL)

ほぼ独立した環境なので、Windowsで入れたプログラムや設定をこの中から使うのは手間がかかりますが、その分だけWindows環境を気にせずに実験できます。
私はUbuntuを選んでインストールしました。

ちなみに、Windows上のユーザーディレクトリは/mnt/c/Users/[ユーザー名]になります。

Vagrantは使えません

WSLの制約により、WSL上からVagrantを起動させることはできません。Linux版のVagrant/Virtualboxをインストールしても起動できません。
このため、Vagrant周りだけはgit bashを使うことになります。

WSLのセットアップ

WSL上でもひととおりのことができるよう、環境をセットアップしていきます。
以下はWSL内で実行するコマンドです。

PHP

私の部署で使う環境はPHPメインなので、一応PHPが動かせるようにしておきます。

sudo apt-get update
sudo apt install php7.2-cli php7.2-xml php7.2-curl php7.2-mbstring php7.2-zip

git/ssh設定を共有

設定が散らばらないようにするための作業です。

ln -s /mnt/c/Users/[ユーザー名]/.ssh ~/.ssh
ln -s /mnt/c/Users/[ユーザー名]/.gitconfig ~/.gitconfig

Linuxで設定した権限を /mnt以下にも適用する

これがないと、SSHファイルの権限過剰でgitが失敗します。

/etc/wsl.conf
[automount]
options = "metadata"

実行後WSLを再起動すると、/mnt/以下に権限が反映されるので、

chmod 600 ~/.ssh/*

します。

日本語設定

テキストファイルは日本語の可能性があるため、文字化けしないようにします。

 sudo apt -y install language-pack-ja
 sudo update-locale LANG=ja_JP.UTF8

実行後Ubuntu再起動

Vagrant + Virtualbox

ここからは、Windows(Git for windows)に対してインストールします。

インストール後下記コマンドを実行
vagrant plugin install vagrant-omnibus vagrant-vbguest

仮想マシンへの初回sshに失敗する場合

Windows環境では、セットアップ時に

An error occurred in the underlying SSH library that Vagrant uses.
The error message is shown below. In many cases, errors from this
library are caused by ssh-agent issues. Try disabling your SSH
agent or removing some keys and try again.

If the problem persists, please report a bug to the net-ssh project.

timeout waiting for next packet

のエラーが出て失敗することがあります。
この場合、

vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]

の設定をコメントアウトすることで対応できます。

仮想マシンのセットアップに失敗する場合

common.sh

なぜか、Windowsのgit bashでは、シェルスクリプトの関数が使えません。
既存コードに関数が含まれている場合、それを除去する必要があります。

(´-`).。oO(オークファンでは、起動確認スクリプトに入っていたので、しれっと外しました)

nvm + node.js + gulp

一部環境では、gulpがないとページが閲覧できません。
このとき、仮想マシンでなくOS側にnode.jsが必要です。
Windowsは標準でnode.jsがないため、インストールします。

nvm & node.js

Windows版NVMをインストーラ経由でインストールする。

$ nvm install 10.14.0
Downloading node.js version 10.14.0 (64-bit)...
Complete
Creating C:\Users\[ユーザー名]\AppData\Roaming\nvm\temp

Downloading npm version 6.4.1... Complete
Installing npm v6.4.1...

Installation complete. If you want to use this version, type

nvm use 10.14.0

$ nvm use 10.14.0
Now using node v10.14.0 (64-bit)

gulp

gulpを入れるためにはビルドが必要で、ビルドのためにはpython2.7とwindows-build-toolsが必要です。

windows-build-tools

https://ginpen.com/2017/09/06/vcbuild-exe/
の通り、npm install --global windows-build-tools すれば作業完了です。

pythonを個別に入れたい場合は以下の手順をたどります。

python2.7

https://www.python.org/downloads/release/python-2716/
インストーラからインストール後、環境変数にC:\Python27を追加します。

git bash上で実行するgulpのインストーラ上でwhich python2を参照するが、インストール直後は python.exe しかなく、これだけではインストールできません。
このため、荒業ですが C:\Python27\python.exepython2.exeに複製します。( ln -s してもいい )

さらに、そもそもgit bashではpythonコマンドが直に叩けないため

#.bash_profile
alias python2='winpty python.exe'

を設定して回避します。

PHP

Windowsは標準でPHPが入っていません。
オークファンの開発ではGit for windows上からcomposerを動かすため、WindowsにPHPのインストールが必要でした。

DL

PHPのオフィシャルから任意バージョンをダウンロードし、zip解凍する。
てっきりインストーラがあるかと思っていましたが、任意のディレクトリに配置すればOKなようです(ただし半角スペースを含むパスには置かないこと)

パスを通す

システム-システムの詳細設定-詳細設定-環境変数の「PATH」に、PHPを配置したディレクトリを追記します。

実行できるようにする

  1. php.ini-developmentphp.iniにリネーム
  2. Dynamic Extensionsに記載されているextensionリストからopenssl curl mbstringのコメントアウトを外す

OpenSSH

今のWindowsはTera Termなどの端末ソフトがなくてもSSH接続可能です。
「オプション機能の管理」-「機能の追加」からOpenSSHを選択し、「OpenSSHクライアント」「OpenSSHサーバー」を追加する。

サービス-「OpenSSH Authentication Agent」を「開始」すると、/Users/[ユーザー名]/.ssh/config に置いた設定が有効になり、Git bashからssh.exe [configの名前]が利用可能。
http://www.freia.jp/taka/blog/windows-native-ssh-client/index.html

RLogin

ポートフォワーディング用にSSHクライアントを用意しました。

RLoginでポートフォワーディング

オークファンでは踏み台サーバーを用いた本番運用を行っています。
Macならば.ssh/configに記載していく設定ですが、RLoginで踏み台サーバー経由のSSH接続を行い、MySQL Workbenchで接続できるようにします。
この設定については
https://qiita.com/ko-he-8/items/41bb79eedb920d80601d
の内容がほぼそのまま利用できます。

Docker

オークファンの開発環境は、多くはVagrantですが、一部にDockerが入っています。
WindowsではVagrantとDockerを同時起動できないため、Dockerを起動するためのVagrantを用意して、その中でDockerを動かすことで対応します。
この点に関しては
https://qiita.com/sola-msr/items/00a47a22e548a7b3574c
https://qiita.com/suzuesa/items/00afb144a03cb3a0d262
の2記事に従ってVagrantfileを作成することで対応可能でした。

PhpStorm

ライセンスはマルチOSなので、普通にインストールできます、Mac版とはちょっとグラフィックが異なるので、慣れるにはちょっと時間がかかります。
(´-`).。oO(検索速度はMacより重いですね)

SwitchHosts!

Windows/Mac共用で使えるツールで、hostsファイルを切り替えられるようになります。
オークファンではhostsファイルを使った開発が多いため、この対応は必須です。

gas maskから移行する

Mac時代は、gas maskをメインで使っていました。
書式自体はほぼ同じなので、File->Importでインポート可能。あらかじめ My Hostsが用意してあるので、そこに張り付けても大丈夫です。

権限をつける

Windowsのhostsファイルは、アプリケーションを管理者で実行するだけでは書き換えられないため、権限の変更が必要になります。

https://github.com/oldj/SwitchHosts/issues/272
以上の手順に従い、 C:\Windows\System32\drivers\etc\hostsファイルの Users に対する権限を編集し、書き込み権限を 許可 する

Sourcetree

Version3から、かなり使い勝手が変わりました。
(´-`).。oO(私はあまり慣れませんが、グラフィックで内容を確認するには一番です)

MySQL Workbench

(´-`).。oO(これは使い勝手がほとんど変わりません)

業務用ツール

Microsoft Office

Slack

このあたりは特記することはありません。
むしろWindowsのOfficeの安定さが際立ちますね。

便利ツール

Visual Studio Code

Macとほぼ同じ感覚で使えるため、Mac->Windowsでも違和感ないはずです。
昔はサクラエディタばかり使っていましたが、Macでかなり慣れたため、こっちに移行しました。

WinMerge

Macのどの比較ツールよりもわかりやすい!
これを使うためにWindowsに移行したといっても過言ではありません。

xdocdiff

WinMergeで、xlsx形式ファイルの比較を可能にするプラグイン。
32bitでしか動かないようなことを書いてあるが、Version 2.16.2.0 Japanese Unicode X64 で動作を確認しました。

Ctrl2Cap

Capslockキーを押下したときの挙動をCtrlキーに変更します。
Macとは違い、修飾キーカスタマイズは標準で用意されていないためです。

インストール時は、管理者権限でコマンドプロンプトを実行し、ctrl2cap /install
http://in-the-mirror.net/?p=763

CubeICE

Macでzipファイルを作ると、Windows環境ではファイル名が文字化けします。
このソフトでは、Mac環境で作成したzipファイルを文字化けせずに解凍でき、逆にMacで文字化けしないZipファイルを作成できます。

設定

Windows環境にも少しだけ手を入れます。

英語キーボード

キーボード言語を変える

外付けキーボードが英語なので、Windowsの設定で英語キーボードとして認識させます。
https://enjoypclife.net/2016/10/17/windows-10-us-keyboard-layout-japan-tips/
これにより、ノートパソコンのキーボードも英語になりますが、そこは慣れでカバー

(Macだと日本語キーボードと英語キーボードを併用できます。流石ですね)

(´-`).。oO(ちなみに、今私が使っているキーボード紹介記事はこちら)
https://qiita.com/s_satoh/items/345833c925dcadcf6386

Microsoft IME

予測変換を切る

Mac標準の日本語入力がちょっと苦手で、Google日本語入力を使っていました。
しかし自宅のWindowsではATOKを使っていたため、今のWindowsの予測変換には全くなじめませんでした。

英語キーボード時のE/J切り替えをCtrl + Spaceに変更する

英語キーボードの場合、Alt +Backquoteで日本語・英語切り替えを行います。
しかしSlackではAltキーを押すと問答無用でコンテキストメニューを開いてしまうため、日本語・英語切り替え後のキー操作が全く効かなくなり、超不便です。
Mac時代にCmd + Spaceで切り替えるようにしていたため、Windowsでも同じキー操作(Ctrl + Space)で切り替えられるようにします。

  1. IMEバーを右クリック -> プロパティ -> 詳細設定 -> 編集操作「キー設定」の変更 
  2. Ctrl + Spaceのキー定義を「半角/全角」キーと同じに設定する

これで対応可能です。

あとがき

Windows -> Mac -> Windows というPC遍歴をたどる人は稀かもしれません。
ですが、会社によって必要な環境、与えられる環境は異なります。
こういう知識が役立つと信じて……。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む