新・日々録 by TRASH BOX@Eel このページをアンテナに追加 RSSフィード

2016-08-28

改訂版:WindowsにNode.jsを手動インストールする方法

id:eel3:20140309:1394294944 から若干状況が変化したようで、Node.jsWindowsに手動インストールする方法がほんの少しだけ楽になった。

以前の方法では、node.exeとnpmのアーカイブを別々に取得してセットアップしていたのだが、いつの間にかnode.exeとnpmが一緒になったアーカイブが配布されるようになっていた。そこで、そのアーカイブを使うことにする。

  1. 公式サイトダウンロード一覧にアクセスする。
  2. LTSかCurrentか、使用したいものを選択する。
    • 今回はv6.4.0 Currentを使用するものとする。
  3. ダウンロード一覧のページの「All download options」というリンク経由で、ダウンロード可能なファイル一式にアクセスできる。この中から「node-<バージョン番号>-win-<x64ないしx86>.zip」のような名前のファイルをダウンロードする。
  4. ダウンロードしたアーカイブ・ファイルを展開する。アーカイブ・ファイル名から拡張子を除いた名前のフォルダに展開されるので、そのフォルダ名を「node」のような名前に変更する。
  5. 前述の展開されたフォルダを任意の場所に移動する。
    • 今回はCドライブ直下に移動する(結果として「C:\node」ができる)。
  6. 環境変数Pathに、前述のフォルダ内のnode.exeが置いてある位置のパスを追加する。
    • 今回は「C:\node\node.exe」なので、環境変数Pathには「C:\node」を追加する。
  7. 環境変数NODE_PATHを追加し、node_modulesのパスを登録する。
    • 今回は「C:\node\node_modules」。node_modulesはnode.exeと同じパスに置いてあるはず。
  8. 最後にnpmを最新版にする(公開されているアーカイブが最新版だとは限らないため)。「npm update -g」でOK。

だいたいこんな感じになっているはず。

C:\node
|   CHANGELOG.md
|   LICENSE
|   node.exe
|   npm
|   npm.cmd
|   README.md
|
\---node_modules
    \---npm

# NODE_PATH=C:\node\node_modules

若干ファイルが増えているものの、node_modules・node.exe・npm.cmdの配置場所は、以前の手動インストール方法と同じになる。

この構成で「npm install -g <some-package>」とオプション `-g' 付きでパッケージをインストールすると、「C:\node\node_modules」直下にパッケージのフォルダが作成され、その中にファイル一式が配置される。

Node.jsは、デフォルトでは「C:\node\node_modules」直下のパッケージを認識しない。環境変数NODE_PATHで登録する必要がある。

後でNode.jsバージョンアップする方法は?

後でNode.jsバージョンアップしたくなった場合には、公式サイトからnode.exe単体をダウンロードして、C:\node\node.exeに上書きしてしまえばよい。

npm本体は「npm update -g」で更新できるので、わざわざ手作業で差し替える必要はない。

2016-08-26

書籍購入:『ノンエンジニアのための社内ネットワーク施工・構築ガイド』

社内ネットワーク構築の下準備として、基本的なところを勉強中。というかネットワークエンジニアじゃないので、こういう基礎から下積みしないと、計画を練ることすらできない。

id:eel3:20160127:1455023775 で購入した『インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン』は、あれはあれで興味深い内容だったし、「実現したいサービスに合致した構成はどれか?」という視点を元に構築すべきネットワークの論理構成を探るのに結構役に立った。

ただ如何せん「より具体的な内容」――計画の策定だとか、機器の選定とか、そういう現場作業寄りの部分は範囲外の本だ(元々そちら方面の本ではないので仕方ない)。

本書は社内ネットワークの設計・構築のついてより実践的な内容が1冊にまとめられている。さっと全体を流し読みすれば社内ネットワーク構築の大まかな流れが分かるし、個々の章をじっくり読めば細かな内容も分かる。

なお、本書はタイトルに「ノンエンジニア」と冠しているが、私自身は一応プログラマであるし、最近ご無沙汰だがPC自作したりRaspberry PiLinuxボックスとして弄ったりするし、自宅にGigabit Ethernetの超小規模なLANを組んでSambaマシンを動かしたりしている。

――何を言いたいかというと、そういう「個人の趣味」程度の知識や経験では、社内ネットワークの構築・運用は厳しいっす。実地で学ぶにも、本職のネットワークエンジニアになるか、中小企業の社内SEになるぐらいしか、経験を積めそうなシチュエーションが思い浮かばないなあ。

という訳で、「個人の趣味」レベルを超えた規模の社内ネットワークに関わるのなら、本書は結構役に立つと思う。

書籍購入:『ヤマハルーターでつくるインターネットVPN 第4版』

社内ネットワーク構築の下準備用にもう1冊。

といっても、まだヤマハルータを買うとは決まっていない(それ以前にルータを買うか否かも未決定)なのだが……全体的に知識・経験が不足しているので、その辺を補うための資料として買ったのだった。

――まあ、本書の名前から推測できる通り、VPNを導入できないかなあ、と。それも拠点間ではなくリモートアクセスで。

書籍購入:『改訂新版サーバ構築の実例がわかるSamba実践入門』

社内ネットワーク構築絡みでさらにもう1冊。もっとも、こちらは優先度は低めというか、「将来対応」を見据えた情報収集というか。

管理が行き届いていない小規模社内ネットワークあるあるな問題に直面しているのです。

書籍購入:『改訂新版Windowsコマンドプロンプトポケットリファレンス』

社内ネットワーク構築……とは無関係のオマケの1冊。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

Windowsのコマンドツールって、なかなか情報が見つからないんだよなあ。いや、探せば個々のコマンドの情報は出てくるけど、そうではなく「どんなコマンドがあるか?」という全体像が見えない。

2016-08-22

Raspberry Piにちょうどよいタブレットマウントキットを見つけた

Raspberry Pi 3 Bと公式7インチタッチスクリーンディスプレイを組み合わせて、Premium Touchscreen Case for Official 7" Raspberry Pi Displayに入れて使っている。このケースは、LCD背面のRaspberry Pi本体まで覆い隠すタイプだ。

ASM-1900035-21

ただ、若干不満があった。LCD画面が結構垂直気味になるので、机に置いて操作しようとすると画面が非常に見にくいのだ。まあタッチスクリーンなのにキーボードを接続して使用するという「いや、それタッチスクリーンにした意味あるの?」と突っ込まれる使い方をしていることもあるのだが。

それと、端子の配置の都合でタッチスクリーンを180度回転させた状態でケースに取り付ける必要がある。/boot/config.txtに「lcd_rotate=2」と記述することで、RaspbianなどのOSのブート中に画面出力を反転させればよいのだが、残念ながらブート開始直後やNOOBSの画面には反映されないようだ。

そこで、不満を解消するために、タブレットPC用のマウントキットやアームの類に、ケースごとRaspberry Piを取り付けてしまおうと考えた。こうすれば、タッチスクリーンが高い位置にくる上に角度も調整できるので見やすくなるだろう。またケース本体を180度回転して取り付ければ、/boot/config.txtの設定を変更せずともよいので、ブート開始直後から正しい(180度反転していない)表示になるはずだ。

ところが、使えそうなマウントキットを物色していたのだが、「タブレットPC=薄い」という前提の製品が多く、5cmぐらいの厚みに対応していそうなものがなかなか見つからなかった。

そんな中で、マルツパーツでちょうどよさそうなタブレットマウントキットを見つけた。

厚み5cmまで対応していて、問題なくケースごとRaspberry Piを取り付けることができた。

このマウントキット、本来は吸盤で机などに固定するタイプだ。だが、吸盤部分が直径9cmぐらいあるので、重心をうまいこと調整することで、吸盤で固定することなくスタンドとして使うことができた。

2016-07-16

プログラミングでのコピペの作法

プログラミングコピペというと、次の2通りの解釈が成立するが:

  1. ソースコード中で、似たような処理を1つにまとめずに、コピペして量産していくこと。
  2. やりたいことに近いサンプルコードやスニペットをネットで探して、コピペして利用すること。

――この記事では2番目の方のコピペにおける作法について書こうと思う。

……1番目の方のコピペ作法? 無いよ。というか1番目のコピペをするヤツは「3日に1回足の小指をタンスの角にぶつけてしまう」呪いにかかってしまえ!

コピペ元コードのライセンスに留意する

コピペ元コードのライセンスを調査して、コピペ先コードに取り込んでも問題ないことを確認した上で、ライセンスに応じた取り込み方をすること。

コピペ元コードの内容を理解する

検索して見つけたサンプルやスニペットは、手放しでそのまま流用できる代物ではない。

  • エラー処理が省略されているかもしれない。
  • (自分がやりたいことからすると)余計なことをしているかもしれない。
  • バグがあるかもしれない。
  • 間違いではないが、ちょっと微妙なコードを含んでいるかもしれない。
    • 例えば、配列の要素を連結した文字列を作るのに、joinのような便利な標準の関数メソッドを使わずに、for文でループして1つずつ連結しているとか。
  • 自分の環境では利用できない技法かもしれない。

この辺の判断を下すためにも、コピペ元コードを読み、内容を十分に理解しなくてはならない。

理解できないなら、コピペするのは諦めたほうがよい。後で問題が起きたとき、結局は中身を理解しなくてはならないのだから。

コピペ元コードから必要な部分だけ抽出する

検索して見つけたスニペットには、大抵は自分が実現したい内容にとって不要な処理が含まれている。自分が本当に必要としている部分だけで構成されていることは皆無だ。

だから、不要な部分は徹底的に排除しなくてはならない。不要な部分が残っていると、後でそのソースコードを引き継いだ別の開発者が発狂するだろう。*1

排除するためには、要不要を判断しなくてはならない。要不要を判断するためには、コピペ元コードの内容を理解しなくてはならない。

コピペ先コードのコーディングスタイルに合致させる

検索して見つけたスニペットは、その作者にとって書きなれたスタイルで記述されている。十中八九、コピペ先コードのスタイルとは別物だ。

コピペする際には、コピペ先のスタイルに書き直すこと。

……3〜4つのサンプルコードをコピペして、スタイルを統一せずに組み合わせたコードを、後で解析するのは地獄ですぜ、旦那。実際、地獄だった。*2

コピペ元コードの悪いところを直す

コピペ元コードがスバラシイものであるとは限らない。仕様・機能は十分満たしているが、コード自体はぐだぐだなことも多い。

そういう悪い部分を引き継ぐ必要はない。コードを取り込む際に直してしまうべきだ。

個人的には、VBAOfficeオートメーション)やVBScriptWSHによるWindowsサーバ管理)のスニペットサンプルコードは、割と「機能は十分だが、コードの中身はちょっと微妙」な代物も多いように思う。VBAは、EUC(エンドユーザコンピューティング)の悪い側面が出ちゃった結果、サンプルコードの品質が微妙なことになった気がする。

まとめ

以下の手順にしたがい、清く正しく美しくコピペすること。

  1. コピペ元コードのライセンスに留意する
  2. コピペ元コードの内容を理解する
  3. コピペ元コードから必要な部分だけ抽出する
  4. コピペ先コードのコーディングスタイルに合致させる
  5. コピペ元コードの悪いところを直す

*1:というか私も発狂しそうになった。だって、全体の3分の1ぐらいが不要なコードだったから。3〜4つのコードをネットからコピペしてきて、キメラのごとく悪魔合体させた代物でねぇ(以下、昔話が続く……)。

*2:400行ちょっとのVBScriptのコードだったのだが、暇を見てこつこつ実施したとはいえ、内容の理解とリファクタリングに2週間近くかかった。

2016-07-11

Windows 7再インストール最速マスター 2016-08版

Windows 7のロールアップ・パッケージも出たことなので、これから古いWindows 7 PCを再セットアップしたり、仮想マシンを構築したりする際の、作業時間短縮を視野に置いた作業手順をまとめておこうと思う。

本当はSP+メーカーなどでHotFix専用インストールCDなどを作っておくとよい気がするが、そこまでやる気がない場合でも、この手順で作業しておくと、Windows 7インストール後のWindows Updateにかかる時間が短縮される。というか実際に短くなった。

事前準備

再セットアップ後に適用する大物のパッチ類を事前にダウンロードしておく。マイクロソフトダウンロードセンターMicrosoft Update カタログなどから集めてくるとよい。

  • Windows 7 SP1(無印Windows 7だった場合)
  • KB3020369
  • KB3125574
  • (2016-08-10追記)KB3168965
  • (2016-08-10追記)KB3177725
  • 最新のWindows Update Agentの更新プログラム
    • KB3125574よりも新しいものが出ている場合のみ。2016-0608時点では存在しない。
  • Internet Explorer 11
  • IE11用の累積的なセキュリティ更新プログラムの最新版
    • コレを書いている時点では、2016-0608の定例アップデート配信されたKB3160005KB3175443が該当する。
  • .NET Framework 4.6.14.6.2
  • Officeを利用している場合は、当該バージョンのサービスパックなど。

ちなみに、手元のWindows 7 64bit版では、IE11Microsoft Update カタログからパッチを落とせなかったのだが、互換表示設定に「microsoft.com」を追加した上で、Microsoft Update カタログのサイトを「信頼済みサイト(セキュリティのレベル:中)」に登録したところ、無事パッチを落とせるようになった。どうやら、セキュリティレベルの設定を中にするか、「保護モードを有効にする」をOFFにするか、もしくはどちらも変更しておかないと駄目なようだ。

Windows 7インストール/再セットアップ後の作業

インストールや再セットアップ自体は、基本的にマニュアル通りに実行すればよい。ただし、注意点として、Windows Updateの設定を尋ねられた場合は、一旦OFFにしておくとよい。

以下、インストール/再セットアップ直後に実施する作業を時系列順に挙げる。

  1. ネットワークから切り離し、オフライン状態にする。
  2. Windows Updateを完全に無効化する。
  3. Windows 7 SP1を適用する(無印Windows 7だった場合)
  4. KB3020369をインストールする。
  5. KB3125574をインストールする。
  6. (2016-08-10追記)KB3168965をインストールする。
  7. (2016-08-10追記)KB3177725をインストールする。
  8. 最新のWindows Update Agentの更新プログラムがあるなら、インストールする。
  9. Internet Explorer 11をインストールする。
  10. IE11用の累積的なセキュリティ更新プログラムをインストールする。
  11. .NET Framework 4.6.14.6.2をインストールする。
  12. Officeを利用している場合は、当該バージョンのサービスパックを適用する。
  13. ウイルス対策ソフトを入れる(または入れ替える)場合は、ここで実施する。
  14. ネットワークに接続する。
  15. ウイルス対策ソフトを入れた場合は、ここで手動アップデートする(可能な場合)。
  16. Microsoft Updateを有効にする。
    1. 上記操作でWindows Updateが開始するので、そのまま続行して適用する。
    2. 以後、「更新プログラムの確認」でWindows Updateを何回か繰り返して、更新プログラムが残っていない状態にする。
  17. Windows Updateの更新設定を元に戻す。

事前にオフラインで大物のパッチを適用しておくと、Windows Updateにかかる時間や回数が結構短くなる。

その理由は2つある。1つ目は、Windows Update AgentやIE11パッチが適用されることで、Windows Updateに異常に時間がかかる不具合が修正されるためだ。2つ目は、システムに適用済みのパッチが多いので、パッチの大量ダウンロードと、それに付随して発生するスワップアウトが起こりにくいためだ。