Linuxにおける開発環境

6,839 views
6,745 views

Published on

Published in: Education
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,839
On SlideShare
0
From Embeds
0
Number of Embeds
604
Actions
Shares
0
Downloads
25
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Linuxにおける開発環境

  1. 1. 社内技術勉強会 「 Linux における開発環境」 2008/02/27 Tomohiro MITSUMUNE (a.k.a. Kiske)
  2. 2. 本日のアジェンダ <ul><li>開発環境について </li></ul><ul><li>Linux での開発環境 </li></ul><ul><ul><li>zsh </li></ul></ul><ul><ul><li>screen </li></ul></ul><ul><ul><li>vim (or Emacs) </li></ul></ul>
  3. 3. 開発環境 <ul><li>GUI (Windows) </li></ul><ul><ul><li>マウス操作を主体とした直感的な操作 </li></ul></ul><ul><ul><li>文字だけでなく画像を利用し、動作を明確化 </li></ul></ul><ul><ul><li>インストールしてすぐ使える </li></ul></ul><ul><ul><li>設計で想定されたことしかできない </li></ul></ul><ul><ul><li>重い、遅い </li></ul></ul><ul><li>CUI (Unix, Linux) </li></ul><ul><ul><li>覚える事が多くて、敷居が高い </li></ul></ul><ul><ul><li>多くのことを自分で設定する必要がある </li></ul></ul><ul><ul><li>軽い、早い </li></ul></ul>
  4. 4. Windows>Linux での 開発環境の問題 <ul><li>シームレスな開発ができない </li></ul><ul><ul><li>Windows 側でコード修正 </li></ul></ul><ul><ul><li>scp, sftp, svn とかで Linux 側にアップロード </li></ul></ul><ul><ul><li>変更の度に deploy 作業が生じるため、効率悪 </li></ul></ul><ul><li>文字エンコード , 改行コードの違い </li></ul><ul><ul><li>アップロード後に「動かねー」と叫ぶ理由の 1 つ </li></ul></ul>
  5. 5. Linux での開発 <ul><li>Linux 環境での開発効率向上アイテム </li></ul><ul><ul><li>zsh </li></ul></ul><ul><ul><li>screen </li></ul></ul><ul><ul><li>vim (or Emacs) </li></ul></ul><ul><li>開発効率が上がると </li></ul><ul><ul><li>早く帰れる </li></ul></ul><ul><ul><li>友人 / 家族 / 恋人と団欒 </li></ul></ul><ul><ul><li>趣味の時間 </li></ul></ul><ul><li>リア充への第一歩! </li></ul>
  6. 6. zsh <ul><li>Unix のコマンドシェルの 1 つ </li></ul><ul><li>bash + tcsh + ksh = 「究極のシェル」 </li></ul><ul><li>主な機能 </li></ul><ul><ul><li>コマンド補完機能 </li></ul></ul><ul><ul><li>プロンプト表示 </li></ul></ul><ul><ul><li>スペル修正機能 </li></ul></ul><ul><ul><li>コマンドラインスタック </li></ul></ul><ul><ul><li>拡張されたファイル選択 </li></ul></ul><ul><li>参考記事 [http://journal.mycom.co.jp/column/zsh] </li></ul>
  7. 7. autocomplete <ul><li>コマンド自動補完 </li></ul><ul><li>autoload –U compinit </li></ul><ul><li>compinit </li></ul><ul><li>さまざまなコマンド補完に対応 </li></ul><ul><ul><li>シェルコマンド ( ls, tar, diff, etc…) </li></ul></ul><ul><ul><li>ソフトウェア ( apache, php, ruby, etc…) </li></ul></ul><ul><li>自分でコマンド補完リストも作成可能 </li></ul>
  8. 8. プロンプト表示 <ul><li>RPROMPT </li></ul><ul><ul><li>コマンドライン右側に出るプロンプト </li></ul></ul><ul><ul><li>カレントディレクトリとか出すと便利 </li></ul></ul><ul><ul><li>コマンドが長くなってくると勝手に消える </li></ul></ul><ul><li>local GREEN=$'%{e[1;32m%}' </li></ul><ul><li>local BLUE=$'%{e[1;34m%}' </li></ul><ul><li>local DEFAULT=$'%{e[00;m%}‘ </li></ul><ul><li>PROMPT=$BULE'[${USER}@${HOSTNAME}] %(!.#.$) '$DEFAULT </li></ul><ul><li>RPROMPT=$GREEN'[%~]'$DEFAULT </li></ul>
  9. 9. グローバルエイリアス <ul><li>コマンドライン上の全ての要素をエイリアスとして展開 </li></ul><ul><ul><li>通常のエイリアスは第 1 要素のみ </li></ul></ul><ul><li>alias -g L=&quot;| $PAGER&quot; </li></ul><ul><li>alias -g G=&quot;| grep&quot; </li></ul><ul><li>alias -g T=&quot;| tee -a logfile“ </li></ul><ul><li>alias -g H=&quot;| head&quot; </li></ul><ul><li>alias -g TL=&quot;| tail“ </li></ul><ul><li>abbreviation という更に便利な機能もある </li></ul>
  10. 10. コマンドラインスタック <ul><li>M-q </li></ul><ul><li>入力中のコマンドを一時保存できる </li></ul><ul><li>./configure --prefix=/usr/local/php-5.2.5 </li></ul><ul><li>--with-config-file-path=/etc --enable- </li></ul><ul><li>と、打った後に </li></ul><ul><li>chmod 744 /usr/local/php-5.2.5 </li></ul><ul><li>と、したいときに有効 </li></ul><ul><li>スタックなので 2 重 3 重に格納することも可能 </li></ul>
  11. 11. その他便利な機能 - コマンド <ul><li>コマンドシェルのミススペルを指摘 </li></ul><ul><li>setopt correct </li></ul><ul><li>cd 打つのがメンドクサイ </li></ul><ul><li>setopt auto_cd </li></ul><ul><li>勝手に pushd </li></ul><ul><li>setopt auto_pushd </li></ul><ul><li>ディレクトリスタック内をユニークに保つ </li></ul><ul><li>setopt pushd_ignore_dups </li></ul>
  12. 12. その他便利な機能 - スクリプト処理 <ul><li>data000 ~ data255 というファイル作成 </li></ul><ul><li>touch data{000..255} </li></ul><ul><li>sample.sql 以外の sql ファイル削除 </li></ul><ul><li>rm *.sql~sample.sql </li></ul><ul><li>カレント以下のシンボリックリンク削除 </li></ul><ul><li>rm **/*(@) </li></ul>
  13. 13. screen <ul><li>GNU screen </li></ul><ul><li>1 つの端末から複数の端末を仮想的に同時に扱えるようになる </li></ul><ul><li>主な機能 </li></ul><ul><ul><li>同時に複数の端末を扱えるようになる </li></ul></ul><ul><ul><li>バックスクロールでログが見れ、コピペもできる </li></ul></ul><ul><ul><li>柔軟な接続機能 </li></ul></ul>
  14. 14. うれしい機能 <ul><li>バックスクロール </li></ul><ul><li>autodetach </li></ul><ul><ul><li>セッション終了時にプロセスをバックグラウンドへ </li></ul></ul><ul><ul><li>突然回線が切れても大丈夫 </li></ul></ul><ul><ul><li>1 プロセスに複数 attach も可能なので、違う端末からでも全く同じ環境での作業が可能になる </li></ul></ul><ul><li>画面分割 </li></ul><ul><ul><li>vim や emacs のように仮想ターミナルを水平分割 </li></ul></ul><ul><ul><li>なんちゃってデュアルディスプレイ </li></ul></ul>
  15. 15. .screenrc ( 設定ファイル ) <ul><li>escape ^z^z </li></ul><ul><li>hardstatus alwayslastline &quot;[%02c] %`%-w%{=b bw}%n %t%{-}%+w&quot; </li></ul><ul><li>autodetach on </li></ul><ul><li>startup_message off </li></ul><ul><li># copy mode 時のバッファ量を設定 </li></ul><ul><li>defscrollback 3000 </li></ul><ul><li>scrollback 3000 </li></ul><ul><li>term xterm-256color </li></ul><ul><li>markkeys &quot;h=^B:l=^F:$=^E&quot; </li></ul><ul><li># ウィンドウ分割設定 </li></ul><ul><li>bind -c REGION 2 split </li></ul><ul><li>bind -c REGION 1 only </li></ul><ul><li>bind -c REGION 0 remove </li></ul><ul><li>bind -c REGION o focus </li></ul><ul><li>bind -c REGION ^ resize </li></ul><ul><li>bind x command -c REGION </li></ul>
  16. 16. vim <ul><li>テキストエディタ </li></ul><ul><ul><li>Unix 系 OS には大抵標準で入ってます </li></ul></ul><ul><li>主な機能 </li></ul><ul><ul><li>マルチバッファ </li></ul></ul><ul><ul><li>ウィンドウ分割 </li></ul></ul><ul><ul><li>動的単語補完 </li></ul></ul><ul><ul><li>400 以上の文法に対応した highlighting </li></ul></ul><ul><ul><li>40 以上の言語に対応したオートインデント </li></ul></ul><ul><ul><li>ctags を利用したタグジャンプ </li></ul></ul><ul><ul><li>独自スクリプト実装 (vim script) </li></ul></ul>
  17. 17. vim の問題点 <ul><li>操作が変態的 </li></ul><ul><ul><li>hjkl で移動 </li></ul></ul><ul><ul><li>さまざまなモード ( normal, visual, insert ) </li></ul></ul><ul><li>どうやって習得するか </li></ul><ul><ul><li>チュートリアルモードが用意されている </li></ul></ul><ul><ul><li>vimtutor とタイプするといきなり開始 </li></ul></ul><ul><ul><li>日本語で良いチュートリアルだと思うのでオススメ </li></ul></ul>
  18. 18. 基本操作 - モード <ul><li>3 種類のモード </li></ul><ul><ul><li>ノーマルモード </li></ul></ul><ul><ul><ul><li>デフォルトモード </li></ul></ul></ul><ul><ul><ul><li>カーソル移動、文字の編集、コマンド入力 </li></ul></ul></ul><ul><ul><li>インサートモード </li></ul></ul><ul><ul><ul><li>文字を挿入 </li></ul></ul></ul><ul><ul><li>ビジュアルモード </li></ul></ul><ul><ul><ul><li>文字を範囲選択 </li></ul></ul></ul>ノーマル インサート ビジュアル
  19. 19. 基本操作 - カーソル移動 カーソル移動 h ← j ↓ k ↑ l -> 0 行頭にジャンプ $ 行末にジャンプ ^ 行の最初の文字へジャンプ H 表示画面の 1 行目へジャンプ M 画面中央へジャンプ L 表示画面の最下行へジャンプ % 対応する括弧へジャンプ gg ファイルの先頭へジャンプ G ファイルの末尾へジャンプ gj 表示行下に移動 gk 表示行上に移動
  20. 20. 基本操作 - 編集 編集 x 1 文字切り取り dd カーソル行を切り取り yy カーソル行をヤンク D カーソル位置から行末を切り取り p カーソルの後ろに貼り付け P カーソルの前に貼り付け J 行連結 ( インデントは削除 ) gJ 行連結 ( 空白はそのまま ) ~ 大文字 / 小文字を切り替える >>, << カーソル行をインデント ,  逆インデント <C-a>,<C-x> カーソル位置の数字の加減 u アンドゥ <C-r> リドゥ :w[!] [file] 上書き保存 (! を付けると readonly でも上書き保存、 file 名指定の場合は名前を付けて保存 ) :q[!] 終了 (! を付けると変更点があっても保存せず強制終了 )
  21. 21. 基本操作 - インサートモード <ul><li>ここで軽くまとめると </li></ul><ul><ul><li>操作がパズル的 </li></ul></ul><ul><ul><li>突き詰める楽しさがある </li></ul></ul>インサートモード i カーソルの前からインサート I カーソル行の行頭からインサート a カーソルの後ろからインサート A カーソル行の行末からインサート o カーソル行の下に新しい行を作りインサート O カーソル行の上に新しい行を作りインサート
  22. 22. 基本操作 - ビジュアルモード <ul><li>ビジュアルモードと編集を組み合わせると非常に強力 </li></ul><ul><ul><li>コピペ </li></ul></ul><ul><ul><li>カット & ペースト </li></ul></ul><ul><ul><li>置換 </li></ul></ul><ul><ul><li>範囲置換 </li></ul></ul><ul><ul><li>範囲を選択後、「 :s/foo/bar 」で範囲置換 </li></ul></ul>ビジュアルモード v 文字単位のビジュアルモード V 行単位のビジュアルモード <C-v> 矩形ビジュアルモード gv 最後に利用したビジュアルモードを復元
  23. 23. 基本操作 - その他 検索 / keyword keyword を検索 n 次の候補に移動 N 前の候補に移動 置換 :%s/ from / to /[g] 全行に対してパターンマッチング (g を付けると複数マッチ ) :m,ns/ from / to /[g] m 行目から n 行目の範囲に対してパターンマッチング 画面分割 :sp 画面を水平に分割 :vs 画面を垂直に分割 <C-w>[h,j,k,l] 分割したウィンドウ間を移動 :only カーソルがあるウィンドウ以外を閉じる ファイル操作 :e [file] file を開く ZZ 保存して閉じる :ls バッファ一覧を表示 :bn, :bp バッファ間を前後に移動 ヘルプ :h [command] command のヘルプを表示
  24. 24. 単語補完機能 <ul><li>インサートモード時に利用可能 </li></ul>キーワード補完 <C-x C-n>, <C-x C-p> 開いているバッファ内から補完 タグ補完 <C-x C-]> ctags ファイルによる補完 ファイル名補完 <C-x C-f> ファイル名による補完 コマンドライン補完 <C-x C-v> vim のコマンドラインから補完 行全体補完 <C-x C-l> バッファ内から行全体による補完 オムニ補完 <C-x C-o> インテリジェンスな補完
  25. 25. テキストオブジェクト <ul><li>テキストのオブジェクト単位で選択 </li></ul><ul><ul><li>ビジュアルモードで主に利用 </li></ul></ul><ul><ul><li>ノーマルモードで編集コマンドと組み合わせる </li></ul></ul>テキストオブジェクト i 対象の内側のオブジェクトを選択 a 対象を含んだオブジェクトを選択 ip パラグラフ単位で選択 di 対象の内側のオブジェクトを削除 it タグの内側のオブジェクトを選択
  26. 26. テキストオブジェクトの便利な例 <ul><li>i </li></ul><ul><li>$this->setAttribute('error', ' エラーです '); </li></ul><ul><li>() 内にカーソルがある状態で vi </li></ul><ul><li>$this->setAttribute('error', ' エラーです '); </li></ul><ul><li>dit </li></ul><ul><li><h2>PHOTOHITO へようこそ </h2> </li></ul><ul><li><h2> タグ内にカーソルがある状態で dit </li></ul><ul><li><h2></h2> </li></ul>
  27. 27. vim プラグイン <ul><li>機能拡張するための仕組み </li></ul><ul><ul><li>中身は vim スクリプトで記述 </li></ul></ul><ul><ul><li>vim 起動時にオートロードされる </li></ul></ul><ul><ul><li>Firefox Extension みたいなもの </li></ul></ul><ul><li>種類は 2 つ </li></ul><ul><ul><li>グローバルプラグイン </li></ul></ul><ul><ul><ul><li>全種類のファイルで利用される </li></ul></ul></ul><ul><ul><li>ファイルタイププラグイン </li></ul></ul><ul><ul><ul><li>特定ファイルのみで利用される </li></ul></ul></ul><ul><li>公式サイトで公開されている </li></ul>
  28. 28. minibufexpl.vim <ul><li>タブエディタ風にバッファを管理 </li></ul><ul><ul><li>vim デフォルトのバッファ管理は貧弱 </li></ul></ul><ul><li>配布元 </li></ul><ul><ul><li>http://www.vim.org/script.php?script_id=159 </li></ul></ul><ul><li>設定 </li></ul><ul><li>:let g:miniBufExplMapWindowNavVim = 1 </li></ul><ul><li>:let g:miniBufExplMapWindowNavArrows = 1 </li></ul><ul><li>:let g:miniBufExplMapCTabSwitchBuffs = 1 </li></ul>
  29. 29. surround.vim <ul><li>テキストオブジェクト操作を拡張 </li></ul><ul><li>配布元 </li></ul><ul><ul><li>http://www.vim.org/scripts/script.php?script_id=1697 </li></ul></ul><ul><li>拡張されたところ </li></ul><ul><ul><li>対象とする文字列自体を削除したり置換 </li></ul></ul><ul><ul><ul><li>ds, cs, ys, vs というコマンド </li></ul></ul></ul><ul><ul><li>囲っている HTML タグ自体を削除したり置換 </li></ul></ul><ul><ul><li>インサートモードから使える </li></ul></ul><ul><ul><ul><li><C-G>S で利用 </li></ul></ul></ul>
  30. 30. fuzzyfinder.vim <ul><li>あいまい検索ファイルエクスプローラ </li></ul><ul><ul><li>部分検索一致も可能 </li></ul></ul><ul><li>配布元 </li></ul><ul><ul><li>http://vim.g.hatena.ne.jp/keyword/fuzzyfinder.vim </li></ul></ul><ul><li>検索モード </li></ul><ul><ul><li>ファイルモード </li></ul></ul><ul><ul><li>MRU モード (MRU = Most Recently Used) </li></ul></ul><ul><ul><li>タグモード </li></ul></ul><ul><ul><li>ディレクトリモード </li></ul></ul>
  31. 31. autocomplpop.vim <ul><li>キーワード補完を自動でポップアップ </li></ul><ul><ul><li>デフォルトだと都度 <C-n> を押す必要がある </li></ul></ul><ul><li>配布元 </li></ul><ul><ul><li>http://hiki.ns9tks.net/?autocomplpop.vim </li></ul></ul><ul><li>便利な点 </li></ul><ul><ul><li>自動でポップアップ </li></ul></ul><ul><ul><li>ファイル名補完と Ruby のオムニ補完にも対応 </li></ul></ul>
  32. 32. commentout.vim <ul><li>範囲選択した箇所をコメントアウト </li></ul><ul><ul><li>いろんなコメントフォーマットに対応 </li></ul></ul><ul><li>配布元 </li></ul><ul><ul><li>http://nanasi.jp/articles/vim/commentout_source.html </li></ul></ul><ul><li>対応してる代表的なコメントフォーマット </li></ul><ul><ul><li># </li></ul></ul><ul><ul><li><!-- --> </li></ul></ul><ul><ul><li>// </li></ul></ul><ul><ul><li>> </li></ul></ul><ul><ul><li>% </li></ul></ul><ul><ul><li>- </li></ul></ul>
  33. 33. ご清聴ありがとうございました http://photohito.com/ もよろしくお願いします

×