彷徨えるフジワラ

年がら年中さまよってます

Mercurial で困った時に

このエントリは、Mercurial Advent Calendar 2013 の25日目です。

このエントリでは、Mercurial を利用していて:

  • ある機能を使いたいが、詳細がよくわからない
  • 期待通りに機能しない
  • やりたい事があるが、どの機能を使えばよいのかわからない

といった場合に、情報を仕入れたり、相談したりする方法について説明します。

まずは、Google や Bing 等を使ったウェブ検索や、Stack Overflow のような技術系情報サイトの使用以外の、Mercurial に特化した情報収集手段について説明します。

書籍で調べる

拙著「入門 TortoiseHg + Mercurial」は絶賛発売中です(笑)。

入門TortoiseHg+Mercurial

入門TortoiseHg+Mercurial

サポートページや、サポート受け付けエントリもあります。

オンラインヘルプを調べる

hg help トピック によるオンラインヘルプ機能を使うことで、各コマンドの使い方や、利用可能な機能の詳細に関して、情報を得ることができます。

hg help あるいは hg help -v 実行により、指定可能な「トピック」が一覧表示されます。

バージョン 2.3 以降の Mercurial であれば、hg help -k "用語" 実行により、オンラインヘルプに「用語」が含まれるトピックを列挙してくれます。例えば:

$ hg help -k "絶対パス"
トピック:

 config 設定ファイル
 urls   URLのパス指定

コマンド:

 clone 既存リポジトリの複製

検索対象となるオンラインヘルプの言語は、言語設定に従います。

hg help -k "用語" 以外の方法としては、ウェブ上で参照可能なオンラインヘルプ hg(5)hgrc(5)hgignore(5) を開いて、ブラウザを使ったページワイドな検索、という手もありますね。

MercurialBTS で確認する

MercurialBug Tracking System (BTS) では、記録されている障害や機能追加要望等に対して、検索を行うことができます。問題を回避する方法 (work around) や、新版で問題が修正済みであることが判明するかもしれません。

トップページの "Quick Search" 欄経由で検索した場合は、Summary と Description が検索対象になりますが、"Search" リンク ⇒ "Simple Search" タブ経由で検索した場合は、投函後の追加 Comments も検索対象になります。

もしも、Mercurial 実行中に想定外のエラーで処理が中断されたなら、コマンド実行時に --traceback オプションを追加して、トレースバック出力付きでコマンドを再実行してみてください。

例えば、以下のようなトレースバックが出力されたなら:

Traceback (most recent call last):
  File "hg", line 42, in 
  File "mercurial/dispatch.pyo", line 28, in run
  File "mercurial/dispatch.pyo", line 65, in dispatch
  File "mercurial/dispatch.pyo", line 88, in _runcatch
  File "mercurial/dispatch.pyo", line 740, in _dispatch
  File "mercurial/dispatch.pyo", line 514, in runcommand
  File "mercurial/dispatch.pyo", line 830, in _runcommand
  File "mercurial/dispatch.pyo", line 801, in checkargs
  File "mercurial/dispatch.pyo", line 737, in 
  File "mercurial/util.pyo", line 471, in check
  File "mercurial/extensions.pyo", line 144, in wrap
  File "mercurial/util.pyo", line 471, in check
  File "hgext/mq.pyo", line 3528, in mqcommand
  File "mercurial/util.pyo", line 471, in check
  File "mercurial/commands.pyo", line 5759, in unbundle
  File "mercurial/url.pyo", line 474, in open
  File "urllib2.pyo", line 400, in open
  File "urllib2.pyo", line 418, in _open
  File "urllib2.pyo", line 378, in _call_chain
  File "urllib2.pyo", line 1310, in file_open
  File "urllib2.pyo", line 1335, in open_local_file
  File "mimetypes.pyo", line 294, in guess_type
  File "mimetypes.pyo", line 355, in init
  File "mimetypes.pyo", line 259, in read_windows_registry
  File "mimetypes.pyo", line 249, in enum_types
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)

"mimetypes enum_types UnicodeDecodeError" あたりをキーワードに指定してみてください。

open みたいな一般的な名称は、検索結果に余計なノイズを増やすので、極力特徴的な名前を選択してください。まぁ、この辺は、Google 等で検索する場合にも共通な、ちょっとしたセンスが必要かもしれませんね。

なお、検索の際の Status 指定が "Open" の場合、解決済み ("Closed") なものは検索対象から除外されます。最新ソースで修正済みのバグも検索したい場合には、対象 Status に "All" を指定するのを忘れないようにしてください。

# "All" の場合、検索結果が膨大になる可能性もありますが……

メーリングリストで確認する

Mercurial 日本語ユーザグループ(mercurial-ja)のメーリングリストは、過去の投函内容の検索/参照に関しては、ユーザ登録不要です。

もしも、英語の使用が特に苦にならないのであれば、Mercurialメーリングリストを直接確認してみるのも良いでしょう。

英語メーリングリストには、一般の利用者向けのもの (The Mercurial list) と、開発者向けのもの (The Mercurial-Devel list) があります。それぞれ、検索用ページへのリンクが数種類用意されていますので、UI 等の好みに応じて選択してください。

Twitter で呟く

これまでに書いた方法でも、問題の解消方法が見つからない場合は、問題を抱えている旨を、何らかの方法で情報発信してください。

ちなみに、「MercurialBTSメーリングリストアーカイブを検索してから呟け!」と言っているわけではないです。

コマンドの仕様や、ヘルプの記述、事前に提示されるメンタルモデルが不適当な場合は、Mercurial 側を改善する必要がありますので、ちょこちょこいじってみて、「駄目だこりゃ!」となった場合は、お気軽にお知らせください。

閑話休題

今時の情報発信手段の第一候補としては、Twitter を選択するのが一般的/お手軽でしょうね。

"mercurial" を含む呟きに関しては、助言できそうなもの/修正案として取り込めそうなものがないか、定期的な検索を私が個人的に行っています。

お蔭様で、Twitter 経由の報告を契機に、多くの修正を実施することができました(2012年版成果一覧)。

但し、あくまで「私が個人的に」検索しているだけですので、個人的な都合で返信が遅れたり:

上記のような理由から、返信自体が無かったりする可能性もあります。

#mercurialjp 付きの呟きの場合、私以外の日本語コミュニティの方の目にも触れますので、単に "mercurial" を含む呟きよりは、何らかの情報が得られる率が上がることでしょう。

場合によっては、原因究明のために、色々な動作確認にご協力頂く場合もあります。実行時の設定情報や、エラー時のトレースバック等の情報が必要になることもありますので、pastebin.comwww.pastebin.ca とどっちが一般的なのかな?)や、etherpad 等での情報公開をお願いするかもしれません。

なお、私が認識している範囲で、「自分で問題解決できる筈」な人の呟きの場合は、#mercurialjp 付きでツイートしても、特に返信せずに放置するケースもあります(笑)。

メーリングリストで質問する

普段の日本語メーリングリストは、新規バージョンのリリースや、重要な障害に関する周知広報がメインになりがちですが、質問や意見等の投函も絶賛受付中です。

実のところ、Twitter での情報発信よりも、「情報の蓄積が機能しやすい」とか「見落とし等が無い」といった点から、メーリングリストに投函して頂いた方が助かります。

TortoiseHg や SourceTree のような GUI フロントエンドや各種 IDE 向けのプラグイン、RhodeCode のようなリポジトリ管理機能といった Mercurial 関連ツールはもちろん、履歴管理の運用に関する相談等のメールも歓迎です。

なお、スパムメール防止の観点から、mercurial-ja メーリングリストへの投函には:

  • メーリングリストへのユーザ登録が必要
  • ユーザ登録後の初回投函は、管理者による許可があるまではメールが配信されない

以上のような制限が設定してあります。

ユーザ登録が必要な設定でも、一時は定期的にスパムメールがあったぐらいなので、少なくとも当分は「誰でも投函可能」な設定にはしない予定ですからご了承ください。

まぁ、今時は、スマートフォンタブレット等の普及もあって、Gmail アカウントを持たない人は少ないでしょうから、登録の敷居/手間も以前ほど高くないでしょう。

普段の流量もそれほど多くないですから、継続的に Mercurial を使われる方は、是非メーリングリストに登録してみてください!

MercurialBTS に報告する

……色々書こうと思ったのですが、エントリも長くなったので、これに関しては、また別途。