rcmdnk's blog
Last update

Stack Overflow

コマンドラインで作業中にコマンドやプログラム言語の使い方がわからなくなって検索した結果 Stack Overflow の回答にたどり着く事はよくあると思います。

その結果をコマンドラインから直接見ることを可能にしてくれる howdoihow2という2つのコマンドの紹介。

howdoi

Python製で、 インストールはpipで1

$ pip install howdoi

使い方はtar.gzの展開方法がわからない、と言った時には

$ howdoi  tar.gz
tar xzf file.tar.gz

みたいな感じで適当に知りたい物を与えるだけ。

stackoverflow.comにある質問の中から Google検索で最初に見つかった質問の 一番最初の解答を取ってきます。

site:stackoverflow.com tar.gz

の結果を見ています。

Googleの検索結果で取ってくるので、 通常のGoogle検索感覚で言葉を加えて検索精度を高めることが出来ます。 (howdoi extract tar.gzなど。ただ、この場合はextractを与えないほうが 上の一番シンプルな良い感じの解答が出てきました。)

オプションを与えないとその解答の中にコードがあった場合には コード部分だけを(pre or codeタグ)取ってきます。

解答全体を見たいときは

$ howdoi -a tar.gz
tar xzf file.tar.gz
The letters are:
x - extract z - gunzip the input f - Read from a file, not stdin


Answer from http://stackoverflow.com/questions/651018/opening-a-tar-gz-file-with-a-single-command

な感じで-aオプション。参照元のURLも表示してくれます。

複数の解答を見たい場合は-n 2の様に-nに数を渡します。 (2番めの解答は別の質問ページの最初の解答になります。)

また、一つ見てよくわからないから次、みたいにしたい場合には -p 2の様に-pに数を渡すとn番目だけを見ることが出来ます。

デフォルトではstackoverflow.comから解答を探しますが、 http://unix.stackexchange.com/ など他のstackexchangeシリーズなどから解答を探したい場合は

$ HOWDOI_URL=unix.stackexchange.com howdoi -a tar.gz
you can also use tar -zxvf <tar filename> <file you want to extract>
-x: instructs tar to extract files.
-f: specifies filename / tarball name.
-v: Verbose (show progress while extracting files).
-z: filter archive through gzip, use to decompress .gz files.


Answer from http://unix.stackexchange.com/questions/61461/how-to-extract-specific-files-from-tar-gz

の様に、環境変数HOWDOI_URLにURLの一部を指定します。

使えるのはStack Exchangeのサイト(All Sites - Stack Exchange)です。

ちなみに、最近解説された日本語サイト スタック・オーバーフロー も指定可能ですが、 URLがhttp://ja.stackoverflow.com/なので デフォルトの設定でも検索にかかれば出てきます。

日本語も使えるので

$ howdoi 展開 tar.gz

とすると linux - IRIX 6.x で使用されていたxファイルを実行したい - スタック・オーバーフロー のページが出てきます。 (ただしtar.gzの展開、的な簡単な質問は最早こちらには出てないので tar.gzを含む別の話が出てきています。)

もちろん、

$ HOWDOI_URL=ja.stackoverflow.com howdoi -a tar.gz

の様にサイトを直接指定して絞り込むことも可能です。

how2

こちらはJavaScript製のコマンド。

インストールは

$ npm install -g how2

追記: 2018/02/23

現在依存しているdevnullというパッケージがアップデートされずに 問題を起こしているようで、

/usr/local/lib/node_modules/how2/node_modules/devnull/transports/transport.js:59
Transport.prototype.__proto__ = EventEmitter.prototype;
                                             ^

TypeError: Cannot read property 'prototype' of undefined

な感じのエラーが出るようになっています。

devnullもhow2の方も作者がアップデートする感じが無いので 有志の人がForkして作ったものが

$ npm install -g how-2

how-2という名前で取ってこれる様になっています。 インストールされるコマンド自体はhow2で、 先にnpm install -g how2でインストールしてある場合でも 上書きしてhow-2how2をインストールされます。

osx: TypeError: Cannot read property ‘prototype’ of undefined · Issue #79 · santinic/how2

追記ここまで

こちらのコマンドはGitHubへの最初のコミットが今年になっている 比較的新しいものです。 (howdoiの最初のコミットは2012年。)

使い方はhowdoi同様知りたい物を適当に聞けば良いだけ。

$ how2 tar.gz
gzip - Pack file with tar.gz from root directory

use the --directory option from man tar :

> -C,- -directory DIR

>  change to directory DIR

i.e.:


   tar -C /mnt/sdb1/ -czf /mnt/sdb1/old_files/new.tar.gz myfile.csv


Press SPACE for more choices, any other key to quit.

こちらは gzip - Pack file with tar.gz from root directory - Unix & Linux Stack Exchange の解答を持ってきました。

how2はデフォルトでは Unix & Linux Stack Exchange (unix.stackexchange.com) から結果を取ってきます。

オプションで-lを使って言語を指定すると Stack Overflow (stackoverflow.com) から探してくるようになります。

検索の仕方として、-lを使わないと

site:unix.stackexchange.com tar.gz

と言った検索ワードで探します。 -lhow2 -l python read fileみたいに指定すると、

site:stackoverflow.com python read file

と言った感じに、最初の検索ワードのURL部分を変更して-lで与えたものは 単に検索ワードの一部として渡します。

ただし、-lを使わなければ how2 python read filepythonという言葉を入れても

site:unix.stackexchange.com python read file

と言う検索ワードになってPythonの情報は上手く得られません。

逆に-lに渡すものは実はなんでもOKで、-lさえ使えばstackoverflowの方を探すようになります。

逆に-lを使わない場合に

'python', 'javascript', 'ruby', 'perl', 'php', 'c++', 'zsh'

が検索用語の中に入っていると-lを使いなさいよ、というwarningが出ます。 (ただし、その場合でもunix.stackexchange.comを使って結果は出ます。)

howdoiの場合と同じ検索方法なはずなのですが、 JavaScriptのAPIのせいなのか、ちょっと違うページのものが出てきています 2

中でのソートみたいなことは各質問ページ毎での回答について Voteが高い順にしてるくらいしかわからなかったのですが。

取り敢えずそれは置いておいて、 how2の場合にはURLを指定したりするオプションは今のところはなく、 -lを使わなければunix.stackexchange.com、 使えばstackoverflow.comから検索します。

ただし、検索したあとの作業でURLをチェックするところがあって、 ここでja.stackoverflow.comみたいなものは弾かれるので、 -lを使った場合でもja.stackoverflow.comから検索することは出来ません。

ちょっといじると日本語サイトからも持ってこれるようにはなりましたが、 最初の検索結果は良いんですが、 下で書いてあるその後のインタラクティブな結果が文字化けするので もうちょっと工夫が必要。 (ちょっとみれば簡単に解決出来そうなものですが。)

rcmdnk/how2 at other_stackoverflow: stackoverflow from the terminal

上のForkのother_stackoverflowブランチ版で

$ how2 展開 tar.gz

とするとja.stackoverflow.comから一応取ってこれます。

話が横にそれましたが、how2の優れている点は最初のコマンド結果に書いてあるとおり、 最初の結果を表示語、Spaceを押すと 質問ページタイトル一覧の表示が出てきて、 さらに各質問ページのタイトルを選択すると、 各ページの解答のタイトル一覧が出てきます。(解答のところにある数字はVote数。)

解答のタイトルを選択すれば解答が見られます。

このように一回のコマンドでインタラクティブに複数の解答を見ることが出来ます。

また、howdoiでは各質問ページの一番最初の解答しか見れませんが、 how2であればおなじ質問ページの別の解答を見ることも可能です。

まとめ

tar

https://xkcd.com/1168/

というわけでhowdoihow2という2つのコマンドを紹介しました。

howdoiの方はシンプルで、表示もコード部分だけ の選択的な表示が出来るので簡単な使い方を探す場合には便利だと思います。 (上のtar.gzの例はまさに完璧な解答を持ってきてくれてます。まあ、たまたまですが。 圧縮したい場合は別ですし。)

how2の方は新しいということもあり、 インタラクティブに別の解答も見に行けたりもして ちょっと複雑なことを知りたい時、色々参照したい時にはとても便利です。

これらのツールを使えばまた一歩ターミナルから離れる時間を減らすことが出来ます。

stackoverflow or stackexchange?

ちなみに、上でもstackoverflowという物とstackexchangeという物が出てきてますが、 これらは全て Stack Exchange Inc.がオーナーの Stack Exchangeというウェブサイトネットワーク の元にあります。

元々Stack Overflowというプログラム関係のQ & Aサイトを作って、 それを拡張するためにStack Exchangeというシステムを作って 入りろな分野に分けたQ & Aサイトを作っていった様です。

今でも大元の stackoverflow.com は基本的なプログラム関係の質問があります。

上にも有るようにUnix (Linux)に関しては unix.stackexchange.com という専用のサイトがstackexchange.comのサブドメインにあります。

中には他の独自ドメインを持った serverfault.comsuperuser.com と言ったサイトも有ります。

さらに、stackexchangeのサブドメインの中に特別な Area 51 というサイトがあり、この中では 新たなサイトの分野を検討したりしています。

一覧は

All Sites - Stack Exchange

また、各サイトには meta.stackoverflow.com と言った具合にサイトにmeta.を付けたサブドメインが存在していて そこではそれぞれのサイトの仕組みや運用の仕方について話し合う場になっています。

stackoverflow.comにもmeta以外のサブドメインを持つものがいくつかあって、 英語以外の言語のサイトもこれに辺り、 今のところ

*Stack Overflow en español (スペイン語) *スタック・オーバーフロー (日本語) *Stack Overflow em Português (ポルトガル語) *Stack Overflow на русском (ロシア語)

が有ります。

意外ととフランス語やドイツ語が無いのにロシア語とかがあって、 または中国語とかも無いです。

日本語版は2014年末に公開されましたが その時は否定的な意見も多かった感じ。

Stack Overflowへようこそ – Stack Overflow Blog – A destination for all things related to development at Stack Overflow

とうか2,3ヶ月前位だった気がしてましたがもう1年以上経ってますね、 殆ど見た気がしませんが……

Sponsored Links
  1. READMEにはHomebrewでインストールする方法も載ってるのですが、

    $ brew install https://raw.github.com/gleitz/howdoi/master/howdoi.rb
    ==> Downloading http://pypi.python.org/packages/source/h/howdoi/howdoi-1.1.7.tar.gz
    Already downloaded: /Library/Caches/Homebrew/howdoi-1.1.7.tar.gz
    ==> python setup.py install
    Last 15 lines from /Users/user/Library/Logs/Homebrew/howdoi/01.python:
    
    Perhaps your account does not have write access to this directory?  If the
    installation directory is a system-owned directory, you may need to sign in
    as the administrator or "root" account.  If you do not have administrative
    access to this machine, you may wish to choose a different installation
    directory, preferably one that is listed in your PYTHONPATH environment
    variable.
    
    For information on other options, you may wish to consult the
    documentation at:
    
    https://pythonhosted.org/setuptools/easy_install.html
    
    Please make the appropriate changes for your system and try again.
    
    
    READ THIS: https://git.io/brew-troubleshooting
    

    こんな感じのエラーが出ています。 現在、PythonはHomebrewでインストールしていて python/usr/local/binに入っていて 直接取ってきて

    $ python setup.py install
    

    しようとすると

    /usr/local/lib/python2.7/site-packages/
    

    にされる様になっていますが、 ログを見てみると

    /usr/lib/python2.7/site-packages/
    

    にインストールしようとしてる模様。 恐らくPATHの設定が伝わってなくて /usr/bin/pythonにあるpythonを使ってインストールしようとしている様です。

    HomebrewでのPythonモジュールのインストールは 相変わらず色々と大変そう。。。

  2. 上のhow2の結果は

    HOWDOI_URL=unix.stackexchange.com howdoi -p2 -a  tar.gz
    

    で得られます。

    逆にhowdoiの最初の結果はhow2でも後で示すインタラクティブなモードの中で見れます。

Sponsored Links

« Vimの'vert new'で右側に新しいウィンドウを作る NeoBundleからDein.vimへの移行 »

}