Windows」タグアーカイブ

WSL (Windows Susystem for Linux) を本格的に開発で使い始めた話

とある理由から WSL (Windows Susystem for Linux) を本格的に開発で使い始めました。その環境や手順、所感など。

前提: これまでの開発環境

  • PHP (Windows版)、メインで使うバージョンだけパスを通し、それ以外のバージョンは手打ちという方法で簡単に複数バージョン共存できます。WebサーバーもPHPのビルトインサーバを使います。
  • Composer(Windows版)、こちらもWindows版が有りあります。
  • MySQL (Windows版)、MySQL / MariaDB を使っている環境の開発用。唯一Linux向けと明確に異なる点としてDB名やテーブル名の大文字小文字を区別しませんが、小文字しか使わないので特に問題になりません。
  • PostgreSQL(Windows版)、PostgreSQLを使っている環境の開発用。特に何も困らず動きます。
  • Node.js、Windows版を利用。Node.js向けのアプリを書くのではなく各種ツールを利用するために導入。npmやwebpackなど特に問題なく動きます。
  • Redis(Windows版)、Windows向けのRedisは若干バージョンが古いものしか見つかりませんがまぁ普通に動きます。
  • Git for Windows、どちらかというとmingwを利用するための導入。実際のGitクライアントとしてはSource TreeのWindows版を利用しています。

前提: これまでのノウハウなど

Windows環境にちゃんと動くComposerを導入する

Windows環境のComposerを複数PHPバージョンで使い分ける

WindowsのコマンドプロンプトからOS標準のsshやtarやcurlコマンドを使う

上記を雑にまとめるとPHPの複数バージョン共存はWindowsでも簡単だし、ごく一部でLinux環境に依存しているComposerパッケージもGit Bashから実行すれば問題無いという話です。

発生した課題

この環境で長らく問題が無かったのですが、Symfony 4 + Flex の環境で開発するにあたって、/bin/console からのコマンドがコマンドプロンプトからは上手く動作しません。これは consoleがWin32なバイナリではなくshebang でPHPを実行しているからなので、ちょっと工夫すれば動くかと思われるのですが、せっかくLinuxに依存する物の実行環境としてgit bashを用意しているのでそれを使ってみます。

実際git bashで問題なく動くのですが、git bash(の利用しているmingw)の限界としてCtrl + Cでビルトインサーバーを止める事が出来ませんでした。どちらも制限アリで使えるのですが、この際せっかくなので本格的なLinux環境としてWSL (Windows Subsystem for Linux)を導入してみます。

WSLはかつてのバージョンではソケット通信が出来なかったりPostgreSQLなどの高度なツールが使う一部の機能に対応せず動作しなかったりデーモンとしてのプログラム起動が出来なかったりしましたが、2018年10月13日現在のWindows 10 リリース1803においては問題ない状態となっているようです。

導入方法

ググればいくらでも情報は出てくるので簡単に。ただしWSLリリース初期は今とは若干異なる手順でしたので古い情報にはお気を付けください。

  1. 「プログラムと機能」→「Windowsの機能の有効かと無効化」→「Windows Subsystem for Linux」を有効化。OS再起動を求められるので再起動します。

  2. Microsoft StoreでUbuntu 18.04 LTSをインストール。他のバージョンやUbuntu以外にもいくつかディストリビューションが選べます。
  3. スタートメニューからUbuntuを起動する。初回起動はインストールの続きが行われるので長めです。一般ユーザー名とsudo時に使うパスワードを求められますがどちらもWindowsのログインに使っているものと同じでにしました。
  4. フォント指定やデフォルトウィンドウサイズの変更はタイトルバー右クリック→「プロパティ」から。個人的にターミナル向けフォントとして長年使っているVLゴシックを指定。
  5. インストールしたままだと一部パッケージが最新でないのでaptコマンドで初回のパッケージ更新を行います。
    sudo apt update
    sudo apt upgrade
  6. あとはほぼ普通のUbuntu Linux環境ですのでaptコマンドなりなんなりで必要なツールチェーンを入れます。私はUbuntu公式のレポジトリからPHP 7.2を導入しました。Windows上のドライブは /mnt/ 配下にマウントされているので開発中リソースはそのままWSL上からも見えますのでどちらからも編集できます。

動作状況

Symfony 4 + Flex の /bin/console CLIなど特に問題なく動作します。/bin/console server:run によるビルトインサーバ起動も問題なく動き、Ctrl + C による終了も問題ありません。

今回PHPを実行する環境としてWSL上でPHPを動かしていますが、DBへの接続はlocalhost指定であろうとTCP/IP接続なので、これまで使っていたWindows版のMySQLやPostgreSQLに普通に接続できます。今はWSL上でもPostgreSQLなどが動きますが速度的にもとりあえずWindows版のまま使おうと思います。

また、ソースをWindows上で動くPHP Stormで編集する事も、それらをWindows版のSource TreeでGit管理する事も特に問題有りません。必要な部分だけをWSL上から実行する事が出来ます。

速度は気持ち程度遅いですが、PHPビルトインサーバを使っている分には特に困らないです。

所感

以前は辛い部分も多かったようですが、今の所思っていた以上に普通のLinux環境として使えます。普段からLinuxサーバーを触っている身としては独自の文化やしきたりを求められないのは使いやすいです。各種アプリパッケージの導入も apt コマンドなど「Linuxディストリビューションとして普通の方法」で行う事が出来ます。Virtual Machineのような環境ではなく、あくまでWindowsのまま必要なツールだけをWSL上から実行できるのも使い勝手が良いですね。

動作速度的にもWSL上でRDBを起動し巨大なテーブルを幾つも載せる、といったような使い方にはあまり向いていないと思われるので、RDBはWindows版を使ったまま「これまで以上にリッチかつナチュラルに使えるLinuxツールチェーン環境」として使うのが良いんじゃないかと思います。

WindowsのコマンドプロンプトからOS標準のsshやtarやcurlコマンドを使う

かつては色々な方法が有りましたが、Windows 10 (April 2018 Update以降) 現在においては特に追加で入れなくてもOS標準で以下のコマンドが使えるようになっています。

    • ssh (ssh-keygen等も含む)
    • sftp
    • scp
    • tar
    • curl

Windows 10にはLinuxのほぼフル機能が使えるWSL(Windows Subsystem for Linux)が有りますがそれを導入せずとも利用できます。唐突にLinux/Unixサーバーに接続してあれこれしたくなった時にも十分対応できそうな感じですね。

コマンドプロンプトのコードページ設定が932(ANSI/OEM 日本語 Shift-JIS)のままでもUTF-8なサーバーに接続してUTF-8なテキストファイルは普通に編集できるので普通に実用可能かと思います。

whereコマンドで探してみると C:\Windows\System32\OpenSSH\ssh.exe が存在している事が分かる。
※2行目に有るものはGitBashで導入されたsshコマンド。

Windows 10 RS4に追加された「curl」と「tar」コマンド
http://ascii.jp/elem/000/001/630/1630041/

自宅のPCを本当にMacBook Proに置き換えられるのか考えてみた

ノートPCが必要なのでMacBook Pro (2017)を買いました。何か月か前の話になります。PCが複数ある事自体面倒ですし、どれぐらい同期や共有を出来るのか、Macに一本化可能なのか考えてみます。

構成を比べてみる

現行PC

  • OS: Windows 10 Home Build 1709
  • CPU: intel Core i3 2100 (SandyBridge 3.1GHz 物理2コア 論理4コア)
  • メモリ: DDR3 16GB
  • ストレージ: 240GB SSD(SATA3) + 3TB HDD + 500GB HDD
  • 光学ドライブ: ブルーレイディスクドライブ (BD-RE)
  • サウンド: USB-DAC (USB 2.0), それなりのヘッドフォン、1万円ぐらいのスピーカー
  • タブレット: Wacom intuos 4 (USB 2.0)
  • 入力: ロジクールのマウス (USB 2.0)、東プレのRealforce (USB 2.0)、安いマイク、USBゲームパッド (USB 2.0)
  • ディスプレイ: フルHDの液晶が2枚
  • LAN: ギガビット有線LAN
  • 他に繋ぐもの: SDカードリーダー(USB 2.0)、Android端末(USB 3.1Gen1 Type-C)、デジカメ (USB 2.0)

MacBook Pro 2017 13インチ タッチバー無し

  • OS: macOS 10.12.6 Sierra
  • CPU: intel Core i5 (Kaby Lake 2.3GHz 物理2コア 論理4コア)
  • メモリ: LPDDR3 16GB
  • ストレージ: 512GB NVMExpress SSD
  • 光学ドライブ: 無し
  • サウンド: オンボードのDAC、2ch内蔵スピーカー(低音出ない)、イヤホン出力
  • 拡張: 電源、映像出力含め USB Type-C (Thunderbolt 3) 2ポートのみ
  • 入力: 非常に打ち疲れする硬くて浅いキーボード、タッチパッド、内臓マイクとインカメラ
  • ディスプレイ: 13インチ。2560*1600ドットの解像度が有るが、目がしょぼしょぼしない実効解像度での利用は普通に狭い。自称低反射なものの普通に反射してつらい。
  • LAN: IEEE 802.11ac (無線LANルーター側も対応済み)

MacBookをメイン運用する場合、オンボードサウンドで音楽を視聴するのはちょっと無いのでUSB-DACを繋ぐ必要が有ります。また、ディスプレイ2枚もどうにかつなぐ必要が有ります。タブレットも繋ぐしデジカメもそれなりの頻度で繋ぎます。キーボードも苦痛を感じるレベルなのでメイン利用にするなら別で欲しいです。

そして光学ドライブが必須です。これはnasneで録画したデータを書きだすのにPC側のドライブが必要になるからです。また、音楽CDの取り込みにも必要です。DL販売? ストリーミング? 有ったら苦労しません。マイナーなジャンル、インディーズ(同人)制作の物、レーベルが全くDL版を出す気が無いコンテンツが有ると、何年経っても光学ドライブが不要になる気がしません。映像についても有名な映画なら配信が有りますが、ライブDVD/BDと言った物は物理円盤でしか存在しないケースが多いです。仮に有ってもブックレットなんて付いてきません。

音楽ライブラリ、デジカメで撮り溜めてきた画像のサイズが凄いのでMacBook ProのSSDに突っ込むのは現実的でないです。物理的に入りません。ファイルサイズ、使用帯域、プロバイダ側の通信制限などクラウドストレージも全く現実的ではないです。FLAC形式のライブラリも有るのでiCloud統一も無理です。そのため新たにNASを導入する必要が有ります。

ゲームなどで遅延が生じると困る事から、ディスプレイも物理的な映像ケーブルでつなぐ必要性が有ります。

ソフトウェア

nasne関連、ゲーム関連、一部のユーティリティソフトなどからWindowsは必須なのでブートキャンプでデュアルブートする事になります。ただ、最新のmacOS High Sierraの新ファイルシステムはWindows用のドライバを提供していないので正直かなりアップデートしたくありません……。

MacはBD試聴においてあまり恵まれた環境ではないので、この部分でもWindowsを使います。

ゲームをプレイするにもそもそもMacBook Pro 13インチのGPU(intel内蔵)が弱い件に関しては、金に物を言わせればThunderbolt 3接続の外付けGPUボックスが存在します。MacBook Pro本体についても冷却台などに乗せて強力に冷やす必要が有りますが、Windowsで起動したうえで最新ゲームがプレイできそうな気がします。

必要な物

電源、HDMI、DVI-D、USB-3.1数ポート、USB2.0数ポートをMacBook Pro本体のType-C 2ポートから生やす必要が有ります。めちゃくちゃスマートじゃないです。ちなみに15インチモデルなら本体側のType-Cが4ポートになります(結局変換は必要ですが)。以下、例についてこの商品をお勧めする物ではないのでご注意ください。実際に買って試したわけでもないです。

上流がType-CかつUSB-PD対応で映像出力も有るハブ

例1: Amazon | AIER Type-C ハブ 4in1 USB-C to HDMI/ LAN/ USB3.0/ Type C PD充電 映像変換アダプタ hub グレー https://www.amazon.co.jp/dp/B076HKCFXY/

4,199円 (2018年01月02日時点)

PD対応ポート(電源)、HDMI、ギガビット有線LAN、USB-3.0を出せるハブです。

例2: LENTION USB-C ハブ 4 in 1 Digital AV Multiportアダプタ 4K HDMI PD充電機能 USB-C  https://www.amazon.co.jp/dp/B07749PR7S/

3,999円 (2018年01月02日時点)

ギガビット有線LANは2ポートも要らないので2つ目はUSB-3.0の多いこちら。どちらのハブも3.1Gen2対応でないのが気になりますが、対応製品は今の所持っていないので問題無いです。

まだまだUSBポートが足りないので、足りない分はさらにハブをぶら下げます。

良い感じのNAS

例3: Synology DiskStation DS218j https://www.amazon.co.jp/dp/B076HJB5L1

Time MachineによるmacOS環境のバックアップ、iTunes Server等にも対応する多機能2ベイのNASです。Amazon Glacierへの2次バックアップができる点も面白そうです。

22,290円 (2018年01月02日時点)

例4: 3.5インチ 4TB WD Red HDD https://www.amazon.co.jp/dp/B01N00F9YO/

HDDは別売りなのでWDのNAS向けHDD。これを2台でRAID1構成にします。

16,500円 * 2 = 33,000円 (2018年01月02日時点)

ここまで計: 63,488円

外付けGPU BOX

例5: GIGABYTE ビデオカード GTX1070搭載 外付けVGA BOX GV-N1070IXEB-8GD https://www.amazon.co.jp/dp/B0744C8MHQ/

83,000円(2018年01月02日時点)です……。もっともGTX1070自体がハイエンドGPUなので、もっと下のランクのGPUとBOXのキットをそれぞれ購入し、自分で組み立てたらもっと安くなると思います。Thunderbolt 3接続なので先述のハブは1つしか利用できませんが、GPU BOX自体から映像の出力が出るのでポート不足にはならないはずです。

意外と何とかなる……?

Type-Cのハブ、Type-Cのハブに電源コード、USB-DAC(の先にヘッドフォンとスピーカー)、BDドライブ、ペンタブレット、HDMI2系統、有線LAN、Realforce、マウスが繋がりそうな気がしてきましたね。お金をかければなんとかなりそうです。

やるかと言われるとなんとも……。MacBook Pro1台にして、これで壊れた時は自分で修理できずAppleに送るしかないです。ファイル共有とバックアップの先としてNASは導入した方が良さそうですね。