ワークシート関数で限界を感じた時は

Excel を使いこなしていくと「ワークシート関数だけではちと厳しいかな」と限界を感じるときがあると思います。 そんな時は気軽に VBA で関数を作っちゃいましょう。 作った関数はワークシート関数と同様に呼び出すことができます。 VBA 自作関数の書き方と呼び出し方を簡単に説明します。 (Excel 2007 以降を想定しています)

Visual Basic Editor を表示する

以下の手順で Visual Basic Editor を表示します。

  1. Office ボタン (一番左上) から選べる「Excel のオプション」-「基本設定」で「[開発]タブをリボンに表示する」をチェックします。 続いて新たに表示された「開発」タブより「Visual Basic」を選択します。
  2. Visual Basic Editor が起動するので、そこから「挿入」-「標準モジュール」を選びます。

ここまでで以下のように「Module1」が挿入されます。 この Module1 に関数を書いていくことになります。

Visual Basic Editor

関数を書いてみる

VBA の文法等について書き始めると収拾がつかないので、簡単にサンプルコードを書いてみます。 Visual Basic Editor の「Module1 (コード)」ウィンドウに以下のコードを書きます。 単純に 10倍の値を返す関数です。

Function myfunc(m)
  myfunc = m * 10
End Function

VBA function

あとはシートに戻ってワークシート関数と同様に呼び出すだけです。

call the function

簡単ですよね!

おまけ

ちなみに VBA のコードの中からワークシート関数を呼び出すには、以下の形式を使います。

WorksheetFunction.ワークシート関数名

例えば、SUM(A1:A10) と同じことをしたい場合は以下のようになります。

Function sum_a()
  sum_a = WorksheetFunction.Sum(Range("A1:A10"))
End Function

範囲を表すのに Range 関数を使ったりするので、全く同じ感覚で使えるわけではないですが、VBA からワークシート関数を呼べるのは知っておくと良いと思います。 Range とか Cells とか Select とか使い始めるとどんどん VBA にハマっていくわけですが、ハマりたい人はとっかかりとしてこのあたりの記事を読むと良いかと思います。

Excel で知らないと恥ずかしい基本操作

仕事をしているとプロジェクターで Excel を映して議論を重ねるような場面もあると思いますが、意外と基本的な操作を知らない人が多いようなので、そんな時にもたつかないための基本操作をまとめておきます。 Excel 2007 以降のバージョンを想定しています。

リボンを隠す

ワイド表示のディスプレイ全盛の時代にあって、ますます邪魔に感じてしまう「リボン」インターフェイスですが、隠す方法 (正確には最小化する方法) をご存知でしょうか? タブの部分 (「ホーム」、「挿入」、…) をダブルクリックすると非表示になります。

hide the ribbon

この状態で各タブを選ぶとメニューは都度表示されます。 元の動作に戻すには再度タブをダブルクリックです。

…って、これは Excel だけじゃなくて、Microsoft Office 全般の話ですね。

ズーム

作業用のシートをプロジェクターで映してみると小さく表示されてしまうので、拡大表示をしたくなりますよね? そんな時、わざわざ「表示」メニューを選ばなくても Ctrl+マウスホイール回転でズーム調整することができます。

これは Microsoft Office だけじゃなくて、Windows 全般で使える技です。(Excel じゃないじゃん…)

幅の調整

CSV ファイルを開いた後の「####」表示を一列ずつ幅調整して直していたりしませんか? 以下の手順で一括して調整できます。

  1. 左上コーナー (下図) をクリックして全セルを選択
    select all
  2. 「ホーム」-(セル)「書式」-「列の幅の自動調整」

ご存知だとは思いますが、画面表示で幅が収まっていても印刷するとはみ出すことがあるので、印刷時はプレビューで確認する必要があります。 念のため。

とりあえずこれだけ覚えておけば、プロジェクター投影時も恥ずかしくないでしょう。 「こんな操作知ってる。レベルが低い。」とお感じの方は是非こちらの記事もご覧ください。

Canon EOS 60D と 64ビット版 Windows

2011年末よりメインのパソコンが 64ビット版の Windows になったのですが、「ちょっとアテが外れたなあ」と思っていたのがカメラ用 Codec の EOS 60D 対応です。 この Codec (コーデック) があると RAW で撮影した .CR2 ファイルもエクスプローラー上のアイコン表示で写真のサムネイル画像が表示されるようになるのですが、Canon から提供されている「Canon RAW Codec」は 32ビット版のみ提供するという状態が今も続いています。

メーカーから個別提供されていない場合も、Microsoft から Camera Codec Pack なるものが提供されていていくつかのモデルはこれで救われていたのですが、残念ながら最近まで 60D には対応していませんでした。 しかし、それも昔の話となり、8月に登場した 16.4.1620.0719 でやっと Microsoft Camera Codec Pack が 60D に対応してくれました。 これでエクスプローラーから写真を探すのが簡単になります。

ファイル名が一瞬わかりにくいかも知れませんが、「amd64」と付いている方が 64ビット版用です。

スマホ用 Kindle ならば英和辞典は標準装備

amazon.com で洋書を入手

最近ソフトウェア版の Kindle で技術系の洋書をいくつか読んでいます。 amazon.com から書籍をダウンロードするわけですが、

  • ダウンロードによる入手はお手軽。配送料も時間もかからない。
  • たいてい Kindle Edition は Paperback より安価に設定されていることが多い。
  • 技術系の本ならばたいした英語力要らない。
  • amazon.co.jp で買い物したことがあればサイトのつくりと操作はほぼ同じなのでとっつきやすい。

っていうあたりが Kindle で洋書を読む理由です。 根本的には、

  • 訳書は原書より高価になることが多い。
  • 訳されるまでにタイムラグが発生する。
  • そもそも訳されていない本がたくさんある。

ということがあるわけです。 最初は辛くても「英語で本を読めるようにしておかなければ」という危機感もあったりするわけです。

例えば「プログラミング Perl」の場合、今年 2月に 4th Edition が出ていますが、日本語訳はまだされておらず、今購入できるのは 10年以上前の 3rd Edition の訳本です。 価格も 4th Edition の Kindle 版は $25.19 = 約 2千円ですが、日本語第3版は Volume 1/2 の分冊となっていて合わせて約 1万円 (5倍!) もします (4th Edition のボリュームは 3rd Edition から減ってはいないように見えます)。 Kindle の Cloud Reader を使えば手元の PC のブラウザ上で表示することが可能なので機器を持ち歩く必要もありません。 これはわかりやすい例ですが、これだけの差があると日本語の「プログラミング Perl 第4版」を待つよりも原書の方を読みたくなりませんか?

英和辞典も使える

あまり知られていないようですが、iPhone/iPad/Android で Kindle アプリを使えば英和辞典も無償で利用できます。 これがまたとてもお手軽に使用できるわけですが、標準の英和辞書は「Progressive English-Japanese Dictionary」とのことで、小学館の「プログレッシブ英和辞典」のようです。 残念ながら Cloud Reader や Windows アプリケーションで英和辞書は利用できないのですが、最初から Kindle の「Library」に入っている「The New Oxford American Dictionary」も Cloud Reader では同様の扱いの様で出版社からのライセンスによる制限と推測されます。 (追記:ハードウェア Kindle やスマホ用アプリに比べて制限があるのは Amazon の戦略かも知れませんね。)

簡単に英和辞典の使用手順を書いておきます。

iOS の例

単語を押さえ続けると辞書が表示されます。 そこで「i」(図中赤丸) を押すと辞書の選択画面が出てくるので、「英語-日本語」を選びます。

確認画面が出るので「ダウンロード」をタップすればダウンロードが始まり、ダウンロード後に英和辞典が使用可能となります。

ただし、iOS 版では辞書の選択は記憶してくれないようで、毎回英和辞書切り替えをやらねばならないようです(涙)。 ま、本当は英英辞書を使いこなしたいところですけどね。 → 追記:気がついたら英和がデフォルトとなってました。再起動が必要?

Android の例

Android 版でも同様に辞書選択が可能ですが、最初から英和辞典の項目が表示されています。 逆に英英辞典はダウンロードしなければならないです。 また、最後に使った辞書を記憶してくれるので、毎回選び直す必要はありません。

それよりも Android 版ではアカウントの扱いでハマります。 amazon.co.jp と amazon.com で同じ ID (メールアドレス) とパスワードを使用していると amazon.co.jp の方が優先されてしまい、amazon.com で購入した書籍を読むことができません。 このときは以下の手順で amazon.com と紐付け直します。

  1. Kindle アプリ側で「設定」-「この端末の登録を解除する」
  2. amazon.com のパスワードを変更
  3. 変更したパスワードを用いて Kindle を設定し直し。

さて、何を読もう

とりあえず、自分の読んだ本の中で、(私のように!) 最新技術に乗り遅れている方にお勧めの本を挙げておきます。 短めで安価または無償なので、Kindle 洋書読みデビューには最適です。 興味があれば是非 Kindle で洋書読みを始めてみてください。

「HTML5 for Publishers」
「for Publishers」ではありますがサンプルコードも多く載せられていて、HTML5 の Canvas、Geolocation、Audio/Video についての入門書としてはとても良いと思います。
「jQuery Compressed」
一定の Web 関連知識があり jQuery をこれから始める人には最適です。

英語が苦手と思っている人も継続して英語に触れていれば力はつくので頑張ってみましょう。 Perl プログラマの方は是非 Programming Perl から電子書籍生活を始めてみてください。

gitk で文字化けを防ぐ

さて、先日の記事で文字化けして諦め気味だった gitk (git リポジトリのコミット履歴を確認するための GUI ツール) ですが、きちんとエンコーディングを指定できることがわかりました。 同じディレクトリにエンコーディングの異なる euc.txt、sjis.txt、utf8.txt の3つのテキストファイルがある時、そのディレクトリに以下の内容で .gitattributes という名前のファイルを置いておけばオッケーです。ファイル名の頭のドットを忘れずに。

euc.txt         encoding=euc-jp
sjis.txt        encoding=shiftjis
utf8.txt        encoding=utf-8

おっと、gitk の「編集」-「設定」より、「ファイルごとのエンコーディングのサポート」を有効化しておきましょう (下図)。

Android 端末の内部メモリを空けるには

「空き容量低下」の通知が出たら…

Xperia acro は 32GB の microSDHC メモリカードが付いているのですが、SDカードにどんなに空きがあっても内部メモリー (カタログ等では「ROM」と表記されてます) が一杯になってしまえばアプリケーションの追加や更新ができなくなります。それどころかメールの受信すらできなくなってしまいます。なので「空き容量低下」の通知メッセージが出たら対策をしなければなりません。

で、その対策なのですが、検索して調べても地道に不要なアプリケーションを整理して削除するしか無いようです。 「初期化すれば良い」みたいな極端なアドバイスもありますが、全てを消してしまうことに抵抗がある人は多いでしょう。 私の Xperia acro は au 版 (IS11S、Android 2.3.4) ですが、一応参考になればとやったことをまとめておきます。

最初はまず「アプリケーションの管理」でアプリケーションをサイズ順に並べ、どのアプリケーションがストレージを多く使っているか把握するところからです。 SDカードを使っているアプリに関しては内蔵メモリーの使用分だけが表示されています。 もちろん SDカードに置いておけるものは SDカードに移しておきましょう。 下の画面から「SDカード」タブを選ぶと移すことができるアプリを確認できます。

アプリのストレージ使用量を確認したら、サイズの大きい不要アプリケーションを消して行きます。 基本はアプリの削除で空きを増やしていくのがお勧めです。 使用するアプリについて「キャッシュ」や「データ」を個別に消去することもできますが、それはあまり効果がないように思えます。 確かに「キャッシュ」は消去すれば空きは増えます。 しかし、使用すればまたキャッシュは作成されることになるでしょうから、一時的にしのぐことにしかならない可能性が高そうです。 特に理由がなさそうなのに手動で消さないとどんどんキャッシュ使用量が増えていくようなアプリケーションはそもそも作りが悪いので、さっさとアンインストールするか作者に要望を上げるべきでしょう。

「データ」の消去についてはアプリケーション管理画面 (下図) から消去するとアプリケーションによっては面倒なことが起きそうなので、アプリケーション固有のデータ削除機能を使った方が良いでしょう。 例えば Android 標準ブラウザであればメニューキーを押してから「その他」-「設定」と選択して、キャッシュ/履歴/Cookie/フォームデータ/位置情報/パスワードを個別に指定して削除できます。

とは言っても、どうしようもないときは設定情報などが消えてもかまわないと思うアプリケーションについて、「データ」を消してみるのも一つの手です。 背に腹は変えられない、という状況もあると思います。

地道にやってみる

さて、具体的には私は以下のようなことをしました。

不要なアプリケーションの削除

例えば以下のようなアプリケーションを削除しました。

「Media Remote」
ソニーの BD プレーヤー等をコントロールできるアプリケーションですが、うちには対応機種がなくて使えない割に結構容量喰っていました。
「速デコ」
簡単にメールに絵文字トッピングできるツールですが、やはり使わないのにサイズが大きいという状況でした。

不要な初期アプリケーションのアップデートアンインストール

素直にアップデートを行うと「jibe」や「取扱説明書」等使わないのに更新されているものがあります。 これらについては更新分で結構な容量を喰っていたりするので、「アップデートのアンインストール」をしてしまいましょう。 マニュアルがどうしても必要であれば PDF ファイルを持ち歩くようにすれば SDカード側の消費だけで済みます。

アプリケーションから Web ページへのショートカットへ

わざわざアプリケーションを入れなくても、ブラウザでページを開けばそれで間に合うアプリケーションもあります。 ホーム画面にショートカットを作っておけば使い勝手もあまり変わりません。 ブラウザのブックマークの画面から長押しで「ショートカットを作成」ですね。 私はこの考え方で「はてなブックマーク」アプリを削除しました。

よりサイズの小さなアプリケーションへの移行

同じ目的で用が足りるのであれば、より小さいサイズのアプリケーションに移行すべきです。 私の場合、パスワード管理ソフト「Keepers」は 7MB 程度の容量ですが、「ぱすわ~ど帳」ならば数百KB で済むので決心して移行中です。

不要メールを削除

労力の割にメモリの空き容量を増やす点では効果が微妙なのですが、メール (Eメールアプリ) の整理もしておきましょう。 容量的には微妙でもメールの整理は大事ですよね。 (追記: 指定アドレスからのメールを抽出して SD カードへバックアップするやり方を記事にしました)

更新できない場合

空き容量不足で更新ができない場合、新旧のサイズ次第ではありますが、旧バージョンをアンインストールして空きを作るとうまく新バージョンをインストールできる場合があります。 私の例では空き容量不足で標準「マップ」アプリの更新ができませんでしたが、一旦「マップ」アプリの「アップデートのアンインストール」をしてから行うことで無事更新できました。

まとめ

結局、重要なのは、

  • 不要なものはインストールしない
  • 一旦導入した後もきちんと見直して使っていなければ削除する

ということですね。 しかし、SDHC の方は 10GB 単位で余っているのに内蔵メモリは数MB 空けるのに苦労するというのは何か間違っているような気がします。 この部分だけでもソフトウェアのアップデートで何とかならないものかと思ってしまいますが、何ともならないんでしょうねぇ…。


2012.9.29
更新時の Tips を追記し、一部表現をわかりやすく修正しました。

2012.11.3
「データ」の削除について追記。 10/31 のソフトウェアアップデートで更に状況が悪化したので。 Media Remote 復活してるし。

2012.12.18
有名どころでも「アプリケーションの管理」からデータの削除をしないと消せないものがありますねぇ。 私は Twitter や日経新聞電子版でデータの削除をしました。 この手のログイン情報があれば何とかなるアプリであればデータの削除で良いような気がしてきました。 パスワード管理アプリ等はやったらまずいですよ。

2013.6.1
SD カード利用アプリの内蔵メモリ使用量表示について説明に誤りがあったので訂正しました。 ちなみに結局私は先日 Xperia UL に乗り換えてしまいました…。

Windows ファイルサーバーと Git

「Windows 環境に居ると Git を使いたくてもサーバーが無いし…」なんて思ってませんか? Windows の共有フォルダの環境でもちゃんと Git は動きます。 Windows サーバー上に使用可能な共有フォルダーがあればそれで十分使い始めることができます。 サーバー上でサービスやプログラム等を動かす必要はありません。 さっそく始めてみましょう。

Git for Windows を選択しよう

最近の状況だと、Windows で使用する Git と言えば msysGit なのですが、初心者には落とし穴があります。 msysGit の公式ページを見ると、「Git for Windows」と「msysGit」という 2つの配布パッケージがあります。 英語の説明なのでちゃんと見ない人もいるかも知れませんが (?)、一般ユーザー向けは「Git for Windows」と書かれた方なので、「Git for Windows」をダウンロードして使いましょう。 実際のところ、これまでに書かれているほとんどの記事で msysGit と説明されているものは「Git for Windows」のことを指していますが、公式ページ上で「msysGit」と説明されているものは、Git をハックしたい人向けのパッケージなので注意しましょう。

今回は家庭用 NAS を導入して個人で Git を使うために私のやったことをまとめていますが、パーミッション設定をきちんと行えば仕事で使う Windows サーバー上に複数人が使用する Git リポジトリを置くことは可能だと思います。

共有フォルダの参照の仕方

Git for Windows のインストールは簡単です。 デフォルト値の通り、PATH の設定は「Use Git Bash only」、改行コードについては「Checkout Windows-style, commit Unix-style line endings」を選んでおけばよいでしょう。 それと怒られる前にメールアドレスと名前を設定しておきます。

git config --global user.email "youraddress@example.com"
git config --global user.name "Your Name"

ここまで出来てしまえば、後は共有フォルダを以下の形式で参照してベアリポジトリを作るだけです。

//servername/folder/sub_folder/repository

コマンドラインなら以下のようになります。

ローカルのリポジトリを共有フォルダにおく:
$ git clone --bare myproj //server/disk/git/myproj.git

サーバ上に新たにリポジトリを作成:
$ git init --bare //server/disk/git/myproj.git

Git for Windows の GUI

Git for Windows の GUI もそれなりに使えるので、私は結構愛用しています。 リポジトリの複製では、「//server/folder」形式の文字列がローカルと判定されてしまうので、明示的に「全複写」を選んでおくと警告を避けることができます。 (以下、サーバ名は「dragon」です)

ちなみにコマンドラインを使っている分には git clone で特に警告やエラーとならないので、—-no-hardlinks オプションをつけたりする必要はなさそうです。

GUI を使って差分確認すると、改行コードの差は無視 (diff でいう —-strip-trailing-cr オプション) してくれるので手元に CRLF のファイルと LF のみのファイルが入り交じっていても何とかなりますし、エンコーディング指定で SJIS や EUC のファイルも差分確認できるので、特に外部コマンドを設定しなくてもテキストファイルの確認には十分な気がします。

ただし、リポジトリ履歴確認画面 (gitk) では、エンコーディングの指定ができないようです。  gitk でエンコーディングを指定する方法はこちら。

おまけ

本題とはずれますが、関連して実行した作業を簡単にまとめておきます。

CVS からの移行

私は Subversion をスキップして Git 環境に来たので、CVS リポジトリからのインポートが必要でした。 まずは必要なパッケージをインストールします。

# yum install git-cvs

以下のコマンドでカレントディレクトリの下に CVS のモジュール 1つ分の Git リポジトリ (module.git) を作成します。 CVS モジュールごとに実行しなければなりません。

$ git cvsimport -v -d /usr/local/cvsroot -C module.git modulename

まあ、今どきこの情報を必要としている人はいないかも知れませんが。

Windows 共有フォルダを Linux でも参照する

私の環境では I-O DATA の HDL2-A4.0 がファイルサーバーです。 これは Windows と AppleShare にしか対応していないのですが、Linux マシンからもマウントして使いたいので、/etc/fstab に以下のエントリを作成しました。

//dragon/disk    /mnt/dragon    cifs    password=,noauto    0 0

とりあえず今は買って来たままのパスワードなしの状態で使っています。 起動時の自動マウントはしないように noauto を付けていますが、NAS が 24時間稼働であればこれを外しても良いでしょう。 このように fstab に書いておけば mount コマンド実行が楽になります。

# mount /mnt/dragon

家庭用 NAS HDL2-A4.0 を購入

パソコンの台数が増え、ファイルの整理が必要になっていたため、休暇中に思い立って家庭用 NAS を購入しました。fit-PC2 を長時間使うと結構発熱するのと、何よりミラーされていないという点が不安です。なので、専用のネットワークストレージ製品を購入しました。購入したのは IO DATA の HDL2-A4.0 です。 バッファロー LS-WX4.0TL/R1JNETGEAR ReadyNAS DUOv2 も検討しましたが、LS-WX4.0TL/R1J は NAS Navigator2 という専用ソフト導入が嫌なのでパス、NETGEAR は家庭用 NAS向けと謳われている WesternDigital Red の 2TB が「6~9日以内に発送」だったのであきらめ、結局 HDL2-A4.0 を購入しました。 Amazon プライムに慣れてしまうと 1週間も待てず、思い立ったが吉日で、NAS 向け HD を諦めるならば、ベアボーンよりも既製品という判断です。

HDL2-A シリーズは常時稼動オッケー

というわけで注文当日に到着しました。 ディスクは Seagate の ST2000DL001 というモデルが 2つ入っていました。 Seagate のホームページで情報を見つけることができなかったのですが、IO DATA いわく「24時間稼動オッケー」とのことなので、あまり耐久性について心配する必要なないのでしょう。たぶん。

起動してみる

早速起動してみます。 Mac は所有しておらず、Windows 環境での話のみになりますがご了承ください。

DHCP 環境であれば、電源を入れるだけで「\\landisk-******」でアクセスできる状態になります。 ここで「******」は MAC アドレス (16進) の下 6桁で、MAC アドレス自体は底面に貼られたラベルで確認できます。 NTP サーバーも規定値として ntp.nict.jp が設定されており、「\\landisk-******」の下に見える作成済み初期フォルダを使う限りはセットアップを行う必要はなさそうです。

ちなみに初期フォルダは以下の通りです。

disk
いわゆるファイル共有用
contents
DLNA コンテンツ用
itunes
iTunes サーバー機能用

contents と itunes フォルダももちろん共有設定されていて、エクスプローラーからアクセスできます。 このフォルダに置いておくとそれぞれ DLNA サーバー機能、iTunes サーバー機能によって公開されることになります。 ただし、iTunes サーバーの方はファイルを公開するためにデータベースを更新する必要があります (後述)。

セットアップ

セットアップしなくてもそのまま使えそうですが、「landisk-******」は覚えにくいので変えておきたいところです。 また、当初の目的を忘れずに RAID 1 (ミラーリング) に設定し直さなければなりません。

セットアップには付属 CD を使うのですが、初期設定用の「Magical Finder」はインストールをせずに CD から起動して使用することができます。 このあたり嬉しいつくりです。 マニュアルでは「Magical Finder」で初期設定を行ってからブラウザで詳細設定を行う流れになっていますが、実際のところ、DHCP + Windows の環境であれば「http://landisk-******/」で詳細設定画面にアクセスできるので、CD を使わずいきなりブラウザで設定し始めることもできると思います。 ちなみに初期パスワードは空です。

さて、RAID の組み換えですが、ブラウザでログインし、「システム」-「ディスク」-「フォーマット」で行います。 RAID 1 を選択して実行するとフォーマット自体はすぐに終了しますが、リビルドが延々と続くことになります。 リビルド中に共有フォルダを利用することは可能ですが、以下の点に注意が必要です。

  • 本来のパフォーマンスより落ちる
  • ミラーができていない

ちなみに私の場合、リビルドは 5時間半かかりました。 マニュアルに書いてある「約 3時間」は HDL2-A2.0 = 2GB モデルでの測定値なので注意が必要です。

iTunes サーバー機能と DLNA サーバー機能

初期設定では先述の通り、DLNA用フォルダと iTunes用フォルダが分かれていますが、1つのフォルダで兼ねることもできます。 詳細設定画面からの共有フォルダの設定で「DLNA共有」と「iTunes共有」の両方をチェックしておくだけです。 曲について 2つのコピーを持っておくのはディスクの無駄なので、私も itunes フォルダを DLNA と兼用にしてみました。

実際に使ってみると、どちらのサーバー機能もすんなり使用することができました。 DLNA については Windows Media Player や骨董品と化している Sony NetJuke で試しましたが、特に問題ありません。 ただ、サーバー名の後ろに「.Planex」と付くのが気になると言えば気になります。 まあ、そういうものなのでしょう。

iTunes の方は下の図の様に「共有」の部分に表示されます。 「dragon」が HDL2-A4.0 です。

特に「ホームシェアリング」を作成しておく必要はありません。 ちょっと気になるのが iTunes サーバー上の楽曲の表示はリスト表示のみしかできないところです。 曲が増えてくると使いにくそうです。

また、iTunes サーバーについてはフォルダにファイルをコピーした後にデータベースの更新を行わなければなりません。 データベース更新をスケジュールして実行することもできますが、 1日 1回までなので手動更新と併用することになると思います。 初期設定では自動更新はスケジュールされていないので、フォルダにファイルを入れた後、更新を行わないと曲が見えないことになります。

DLNA も iTunes も曲が増えたらどうなるかはやってみないとわからない部分があります。 画像や動画の扱いについてはまだ試していません。

まとめ

その他にも以下のような機能があります。

  • FTP サーバ
  • BitTorrent クライアント
  • メールによるアラート通知
  • UPnP を使った外部へのフォルダ公開機能 (ブラウザによるアクセス)
  • USB ポートへ接続したディスク共有
  • USB ポートへ接続したプリンタ/スキャナ等の利用 (クライアントにソフト導入が必要)
  • UPS との連携
  • Active Directory との連携
  • Wake on LAN

全部使うつもりはありませんが、アラートメールの設定ぐらいはしておきたいところです。 全体としては今のところとても満足しています。 ハードディスクのトラブルは起こるものなので、ミラーされている共有ドライブがあるというのはそれなりに安心ですね。

最後に気になる点を 1つ。 1つの共有フォルダの設定を変更したら、別のフォルダの変更をする前に必ずサービスを再起動しなければなりません。 続けて複数フォルダの変更をするときはまどろっこしいです。 再起動し忘れを防ぐためにそのようなインターフェイスになっているのでしょうが、まとめて変更して最後にサービス再起動というやり方もできるようにして欲しいところです。

Active Directory 環境の確認手順

Active Directory (AD) の環境を調査するときにどこを見ればよいかの覚書です。 何も把握できていないのに既に導入業者と没交渉、という感じのお客様環境を調べる時に使えます! Windows Server 2003/2008 のドメインコントローラ上で調べることを想定していますが、2003 の場合 Support Tools を必要とする内容もあります。 Windows Server 2003 の時代に書いた (けど放置していた) ものを手直ししています。

フォレスト名、ドメイン名の確認

まず、そのコンピュータが属しているドメインは「コンピューター」のプロパティで確認できます。

関連するドメインを見たい場合は「ドメインと信頼関係」ツールを起動するとドメインが一覧表示されます。 フォレスト名は「ドメインと信頼関係」ツールでツリー最上階層 (「Active Directory ドメインと信頼関係」) のコンテキストメニューから選べる「フォレストの機能レベルをあげる(or 機能レベルの昇格)」の画面で確認できます。

ドメインコントローラの一覧

ドメインコントローラの一覧を得る方法として、まず考えられるのは「Active Directory ユーザとコンピューター」ツールで「Domain Controllers」OU 内の Computer オブジェクトを見ることです。 ここがドメインコントローラを格納する規定の位置です。 Computer オブジェクトのプロパティを確認すれば使用 OS 等の情報も得られます。

しかし、実際はディレクトリをカスタマイズして、これ以外の OU にドメインコントローラ (DC) オブジェクトを動かすこともできます。 その場合は、ディレクトリを検索しなければなりません。 先のリンクのように VB スクリプトを流す他、同じ内容を ldp.exe で検索するという手もあります。 ldp.exe でドメインコントローラのディレクトリサービス (ポート 389番) に対し bind 実行後、以下のように検索すると良いでしょう。(ドメイン名 example.com の場合)

Base Dn: CN=Configuration,DC=example,DC=com
Filter: (objectClass=nTDSDSA)
Scope: Subtree

いずれにせよ、DC オブジェクトが素直に「Domain Controllers」OU 内に無い環境では他にもいろいろなカスタマイズをしている可能性があるので、注意が必要であることに違いありません。 適切な人を見つけ出しヒアリングすることを検討する必要があるでしょう。

それと「Active Directory ユーザとコンピュータ」ツールは「表示」-「拡張機能」を有効にしておきましょう。 2008 だと LDAP 上の任意の属性が確認できるようになっていて便利です。

機能レベル

フォレストの機能レベルとドメインの機能レベルがありますが、それぞれ「ドメインと信頼関係」ツールの「フォレストの機能レベルをあげる」画面と「ドメインの機能レベルをあげる」画面で確認できます。

操作マスタ (FSMO)

各マスタによりどこを見るかが異なります。 同じ画面で操作マスタの転送もできます。

RID、PDC、インフラストラクチャ

「ユーザーとコンピュータ」ツールでドメインを選んで「操作マスタ」メニューを選択します。

ドメイン名前付け

「ドメインと信頼関係」ツールの最上階層を選択後、「操作マスタ」メニュー選択。 ドメイン名前付けマスタはフォレストに 1台です。

スキーマ

「スキーマ」ツールで行いますが、デフォルトではツールがメニューに登録されていないので、使用する前に登録が必要です。

  1. regsvr32 schmmgmt.dll を実行
  2. MMC を起動して「スナップインの追加と削除」「Active Directory スキーマ」を追加
  3. 簡単に呼び出せるように、「名前をつけて保存」で system32\schmmgmt.msc と保存し、これに対するショートカットを作っておく。

スキーマもフォレストレベルでの管理です。 ちなみに、スキーママスタの役割を転送をするにはフォレストルートドメインの Schema Admins グループに入っているユーザでないとダメです。

GC (グローバルカタログ)

「サイトとサービス」ツール内、サーバ配下にある「NTDS Setting」のプロパティの「全般」タブで「グローバルカタログ」にチェックが入っているかどうかを見ます。

ネットワークトポロジ関連

「サイトとサービス」ツールで確認します。 ここで重要なのは以下のような項目です。

  • サイト
  • サイトリンク
    通常「Inter-Site Transports」-「IP」の下のものが重要で「コスト」と「レプリケートの間隔」をチェックしておきます
  • サブネット
  • AD 接続オブジェクト (Connection)
    サーバ配下の「NTDS Settings」の下にあります。たいていは 「<自動生成>」 されています。

KCC (Knowledge Consistency Checker) が「Active Directory 接続」オブジェクトを作ります。 手動で作ることもできますが、後の管理を考えると自動作成に任せた方が良さそうです。 KCC をすぐ動作させたいときは以下のコマンドを実行します。

repadmin /kcc

「NTDS Settings」のコンテキストメニュー、「すべてのタスク」から「レプリケーショントポロジの確認」を実行します。 各サイトにサイト間トポロジジェネレータの役割を持つ DC が存在します。 これは dcdiag.exe で確認できます。

信頼関係

「ドメインと信頼関係」ツールで確認します。 ってこれは迷うこともないですね。

インストール時指定した項目関連

データベースとログ

とりあえず既定のデータベースファイルは以下の通りです。

C:\WINDOWS\NTDS\Ntds.dit

ログファイルも規定ではこのフォルダに作成されます。 領域が足りなくなってきたときは、後から Ntdsutil.exe で位置を変更することができます。 ただし、ディレクトリサービス復元モードでの起動が必要です。 (2008 ではサービス停止のみでオッケーとのこと)

実際の位置は以下のレジストリ値で確認できます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

DSA Database file (データベースファイルのフルパス名)
Database backup path (データベースバックアップファイルフルパス名)
Database log files path (ログ用フォルダ)

SYSVOL

SYSVOL の位置も以下のレジストリキーで確認できます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\SysVol

SYSVOL (SYSVOL フォルダのパス)

復元モードのパスワード

このパスワードは忘れたら確認のしようがないのですが、覚えていれば ntdutil.exe で変更することは可能です。

ネットワーク関連

DNS 関連

DNS 経験者が Windows の DNS サーバを扱う時に、最初わかりづらいのは AD 統合ゾーンだと思います。 AD 統合ゾーンを使えば Windows の複製機能でゾーン情報をサーバ間共有できるので、ゾーン転送の設定が不要になります。 ただし、AD 統合ゾーンはドメインコントローラ上で DNS サーバを動かす場合のみ使うことができます。

AD 統合ゾーンは同期されますが、それ以外のゾーンの内容やフォワーダの設定などはサーバごとに確認する必要があります。

DHCP 関連

Windows サーバ上で DHCP サーバを用いるときは、Active Directory で承認されていなければなりません。 この仕組みは DHCP のベンダー固有オプションを利用して実装されているようで、Windows 以外の DHCP サーバを利用するときは当てはまりません。

承認されたサーバーについては、DHCP 管理ツールで「DHCP」のコンテキストメニュー「承認されたサーバーの管理」から確認できる他、以下のコマンドを実行することで一覧表示することもできます。

netsh dhcp show server

まとめ

自分が Active Directory を触り始めたときにわかりにくかったことをまとめたものなので、これが全てと言うつもりはありませんが、それなりに役立つのではないかと思います。

コマンドラインから WordPress 関連処理を実行する

FC2 ブログで行ってたつぶやきアーカイブを hetarena.com に移すために、コマンドラインで実行するための記事投稿用プログラムを書く方法を調べてみました。 wp-cron ではなく OS の crontab を使用したいので、単独の PHP プログラムファイルとして動かしたいのです。

結論からすると簡単で wp-load.php をプログラムの最初に読み込めば良いです。 参考にしたのはこちらの記事ですが、投稿を作成する程度であれば特に $_SERVER を設定しなくても動きました (→ マルチサイト化されていると $_SERVER を設定しなければ動きませんでした。追記参照)。 以下サンプルコードです。 コマンドラインから実行すると 7/7 付けの投稿が作成されます。 使用する場合はご自分の環境に合わせて修正してからお試しください。

#!/usr/bin/php
<?php

//require the WP bootstrap
require_once('/usr/share/wordpress-ja/wp-load.php');

class WP_Command_Line {

  public function __construct() {
    //nothing here
  }

  public function main() {

    $post = array (
      'post_content'   => 
        "<p>これはインポートされた記事です。</p>\n<p>よろしく!</p>",
      'post_type'      => 'post',
      'comment_status' => 'closed',
      'ping_status'    => 'closed',
      'post_status'    => 'publish',
      'post_author'    => 2,
      'post_title'     => 'テスト用記事',
      'post_date'      => '2012-07-07 00:00:00',
      'post_category'  => array(6)
    );
    $e = wp_insert_post($post, true);
    if (is_wp_error($e)) {
      print $e->get_error_message();
    }
    else {
      print "Post ID = " . $e . "\n";
    }
  }
}

$importer = new WP_Command_Line();
$importer->main();

wp_insert_post の Tips も簡単に紹介しておきます。

  • $post->post_date を設定しなければ実行時の時刻で記事が作成されます。
  • $post->post_author や $post->post_category は既に存在するユーザ/カテゴリーの ID を渡します。 カテゴリーは配列を渡します。
  • 記事 ID 指定で追加したい時は $post->import_id に ID をセットします。$post->ID は更新の時に使います。

詳しくは wp_insert_post のリファレンスをご確認ください。


2012.7.28 追記
マルチサイト化されていると $_SERVER の設定が必要です。以下の様な感じで動きました。

$_SERVER = array(
  "HTTP_HOST" => "hetarena.com",
  "SERVER_NAME" => "hetarena.com",
  "REQUEST_URI" => "/",
  "REQUEST_METHOD" => "GET"
                 );