スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Prev.    Category    Next 

Emacs の使い方 基本のキー

今回は Emacs の入門的な記事です。
"これだけは覚えておいた方がいいんじゃないかな"という基本的な使い方(キー)をあげてみました。 また、少し応用的な使い方についてもなるべくリンクで紹介しています。

  1. 準備
  2. ヘルプ
  3. 基本操作
  4. ファイル、バッファー
  5. 特殊モードでのキー操作
  6. 編集
  7. 補完
  8. プログラミング用機能
  9. その他機能
  10. 最後に
なお、今回は使い方の入門なので、設定等についてはあまり説明していません。
すでに使える状態にあるという前提で進めています。 Windows の場合にはインストール等の設定は以下の記事をご覧ください。 しかし、多少は設定のコードも書いているので、それを使いたい場合には ~/.emacs.d/init.el に追記して下さい。 また、 setq で設定しているような変数は M-x customize-option の後に変数を入力すれば カスタマイズ で設定することもできます。

また、説明が少し長くなってますので、チートシート的に使えるように一覧版も用意しています。

準備

使い方を説明する時に使う用語などについて、先に説明します。

キーの表記

Emacs では、キーバインドを次のような表記で表すことが多いです。
表記 意味
C-v Ctrl キーを押しながら v を押す。
M-v [Esc] キーを押した後に v を押す。
または Alt キーを押しながら v を押す。
Emacs はもともと Unix で生まれたプログラムです。 M- は、 Unix 用キーボードでの Meta キーを指しています。
PC 用のキーボードではこれがないため、Esc, Alt の 2 種類の代替えが用意されています。 個人的には M-v のような連打をよくするものは Alt、 それ以外は [Esc] というように使い分けています。

また、 一回のキーで終わらず、さらにつづけるものもあります。 例えば C-x h では Ctrl を押しながら x を押した後に h を押します。

画面関連の用語

Emacs の画面で使われる主な用語です。
用語 意味
バッファー ファイルなどを開いたもの
ウィンドウ バッファーを表示しているところ
モード行 バッファー情報などを表示している行
ミニバッファー メッセージを表示や値の入力をするところ。
フレーム 通常の GUI でいう外部ウィンドウ
emacs_base_view_term.png

Emacs を始めとしたエディターでは通常、直にファイルを編集するのではなく、 一旦ファイルをメモリー上に読み取って、それに対して編集します。 そのため、編集対象がバッファー(緩衝)と呼ばれます。

その他の用語

用語 意味
コマンド 実行できる機能
メジャーモード C++、 HTML といった編集対象に合わせて決まるモード。 バッファーに対して一つだけ。
マイナーモード バッファーに対して複数有効にできるモード。 いろいろなメジャーモードで使える拡張機能などがマイナーモードとして提供されることが多い。
Emacs では、キーを押したり、メニューを選んだりといったことを行うと割り当てられた機能が実行されます。 この機能を Emacs ではコマンドと呼びます。

ヘルプ

最初に Emacs のヘルプ関連の機能について紹介します。
ヘルプ関連の機能は C-h から始まるキーに割り当てられています。
キー 機能
C-h t チュートリアル
日本語環境に設定されていれば、日本語のチュートリアルが表示されます。 実際に操作したりしながら読めるので、最初にちょっとみてみるとよいでしょう。
C-h k キーを実行するとどんなコマンドが実行されるのかを知りたいときに使います。
C-h C-b 今のモードのキーバインドの一覧を表示します。
C-h f 上の 2 つではコマンド名が表示されるだけです。 コマンドの詳しい説明をみるときに使います。
C-h m 現在のモードのヘルプを表示します。

また、C-x などの後にキーが続くものは、 C-x の後に C-h を押すと、C-x に続くキーの一覧が表示されます。

基本操作

カーソル移動

カーソル移動にも Ctrl キーとの組み合わせのキーバインディングがあります。
矢印キーで移動しても構いませんが、 p, n と上下移動の対応は他でも使うので、覚えておいた方がいいと思います。
                          前の行 ↑ C-p
                               :
                               :
前の文字 ← C-b   ....   現在のカーソル位置   ....   次の文字 → C-f
                               :
                               :
                          次の行 ↓ C-n
その他の移動系でよく使うキーは次のようなところでしょう。
キー 機能 キー 機能
C-a 行頭へ移動 C-e 行末へ移動
M-v 上へスクロール C-v 下へスクロール
M-< バッファー先頭へ移動 M-> バッファー末尾へ移動

キー コマンド 機能
C-l recenter カーソル位置が中央になるようにスクロール
M-g g goto-line 行番号を指定して移動

コマンド指定

Emacs の全てのコマンドがキーに割り当てられているわけではありません。 そういったコマンドを実行する場合には M-x の後にコマンド名を指定して実行します。
  • M-x COMMAND (execute-extended-command)
また、 C-x M-M(C-x の後に [Esc] を 2 回)で、 以前に行ったコマンド(操作)を履歴から選んで実行することもできます。

特殊キー

少し特殊な扱いとなるキーに次のようなものがあります。
キー コマンド 機能
C-g keyboard-quit 中断
C-u universal-argument 繰り返し数の指定やコマンドの動作変更
C-q quoted-insert 次に入力するキーをそのまま入力

処理を途中でやめたいときなど、Emacs ではなんかあったときにはとりあえず C-g を押します。 その他のキーについて詳しくは以前の記事をご覧下さい。

ファイル、バッファー

[File] 、 [Buffer] のメニューにあるような操作について説明します。
ただし、キーの説明は最低限必要かなというものだけなので、 その他のコマンドはメニューを見てください。

ファイル操作

キー コマンド 機能
C-x C-f find-file ファイルのオープン。新規作成
C-x C-s save-buffer ファイルの保存
C-x C-w write-file 名前をつけて保存
C-x C-c save-buffers-kill-terminal Emacs の終了
ファイルの操作に関して、 Emacs 特有な点がいくつかあります。
  • ファイルパス は /
    • ファイルを指定する場合、ファイルパスは \ も使えないことはありませんが、 Windows でも Unix の / を使うのが普通です。

  • ファイルの新規作成とオープンが同じ
    • Emacs では他のエディターなどと違い、 新規作成のコマンドはありません。 find-file で存在しないファイルを指定すると新規作成となります。
      慣れないとちょっと奇妙に感じるかもしれませんが、 Emacs では拡張子で C++ などの編集モードを決めるので、 ファイルの名前を指定してからファイルを作った方が都合がよくなります。

  • キー入力とマウス操作で動作が変わる
    • Emacs では基本的にミニバッファーで入力を行いますが、 メニューといったマウス操作で実行した場合は、 ファイルのオープンなどでファイルダイアログが表示されます。
      なるべくキー入力時はキー、マウス操作の時はマウスだけで操作ができるようになっています。

特殊なファイルのオープン

ファイルのオープン(find-file)では次のようなファイルも開くことができます。
対象 機能
リモートファイル FTP(ang-ftp)を使って表示、編集
gz ファイル gzip で圧縮されたテキストファイルを表示、編集
画像ファイル 画像として表示
(auto-image-file-mode の変数を有効にした場合)
ディレクトリー Dired モード
hexl-find-file (キーの割り当ては無いので、 M-x で指定) でバイナリーファイルを開けば、 Emacs をバイナリーエディターとして使うこともできます。

日本語コード、改行コードの変更

日本語文字コード、改行コードはファイルのオープン時に自動的に判定し、モード行の左側に現在のコードが省略文字で表示されます。
これらを変更したい場合にはまず以下のキーを実行します。
  • C-x [Return] f (set-buffer-file-coding-system)
キーを実行した後、日本語コードは次のようなキーワードを入力します。
表示 キーワード 文字コード
S shift_jis シフト JIS
S cp932 コードページ932 (Windows では正確にはこちら)
E euc-jp EUC-JP
U utf-8 BOM なし UTF-8
U utf-8-with-signature BOM 付き UTF-8

改行コードは次のキーワードです。
キーワード 説明
dos CR + NL
mac CR
unix NL なし
改行コードの表示はシステムと同じであれば、日本語コードの後に \ が付きます。 違う場合は (Mac)、 (Unix) のように表示されます。


日本語コード、改行コードを一緒に指定したい場合には shift_jis-dos のようにハイフン(-)で繋げて入力します。


新規作成時などのデフォルトの文字コードの設定については、以下の記事を見て下さい。

バッファー操作

開いたファイルはバッファーとして扱われます。 複数のファイルを扱う場合には、このバッファーを切り替えて使います。
キー コマンド 機能
C-x k kill-buffer バッファーを閉じる
C-x b switch-to-buffer バッファーの切り替え
C-x C-b list-buffers バッファー一覧

ウィンドウ操作

1 つの画面(フレーム)をウィンドウをわけて、使うことがあります。
キー コマンド 機能
C-x o other-window 隣りのウインドウに移る
C-x 2 split-window-below ウィンドウを横に分割
C-x 1 delete-other-windows カレントのウィンドウ以外を消す
C-x 0 delete-window カレントのウィンドウを消す
C-M-v scroll-other-window 他のウィンドウを下へスクロール

自分から分けて使わないとしても、 ヘルプ、 コンパイルなど自動で分割されることはよくあります。 C-x o のウィンドウの移動と 0 1 でウィンドウを1つに戻す方法は覚えておいた方がいいと思います。

また、分割されたウィンドウはモード行をドラッグすることによって高さを変更することができます。

特殊モードでのキー操作

ファイルの入力等でミニバッファーに入力することになるので、 この辺で通常の編集モード以外での基本的なキー操作についても説明します。

ミニバッファーでのキー

ファイルのオープンなどミニバッファーに入力する場合には次のキーが使えます。
キー コマンド 機能
[Tab]、([Space]) minibuffer-complete 補完
[Space] キーは入力で空白を取らない場合のみ。
C-p、↑ previous-history-element 前の履歴
C-n、↓ next-history-element 次の履歴
この [Tab] による補完はぜひ覚えておきましょう。 Emacs ではミニバッファーで値を入力することが結構あるのですが、 たいていは補完ができるので、それほど苦になることはありません。

表示用バッファーでのキー

ヘルプのような表示用のバッファーの場合には基本的に以下のキーが使えます。
キー 機能
q 終了(バッファーを閉じる)
[Space] 下にスクロール
[Back space] 上にスクロール

リスト表示バッファーでのキー

ディレクトリー(フォルダー)を開いた時の Dired モード、バッファー一覧など Emacs ではリスト表示するモードが幾つかあります。 たいていは同じようなキーバインディングなので、 何か一つリスト系のモードを覚えておくとよいでしょう。

リスト系の機能では共通して、次のようなキーが使えることが多いです。
キー 機能
q 終了(バッファー、ウィンドウを閉じる)
[Space] 下にスクロール
[Back space] 上にスクロール
p 上に移動
n 下に移動
[Return] カレントのリスト項目に対してアクション(開くなど)

また、Dired モードなどでは削除といった操作はリスト項目にマークを付けて処理することもあります。
キー 機能
m マークをつける
d 削除マークをつける
u マークの解除
x マークの実行
マークをつけて(m)からコピーなどの操作するパターンと 削除マーク(d)のように操作のマークをつけてから実行(x)するパターンがあります。

編集

[Edit] のメニューにあるような操作について説明します。

領域選択

領域選択といえばマウスのドラッグや Shift + 矢印キーで行うのが一般的でしょう。
Emacs でも両方ともできますが、編集中にマウスは触るといったことは基本的にやりません。 矢印キーもちょっと遠いです。

Emacs では領域の端を指定し、移動して範囲を選択するという方法をとります。
  1. 範囲指定開始 C + [Space] (set-mark-command)
  2. 移動
  3. 切り取り、コピーなどのコマンド実行
また、バッファーの全選択といった場合には C-x h(mark-whole-buffer) を使います。

切り取り、コピー、貼り付け

Emacs では切り取り、貼り付けに kill, yank(復活) という名前が付けられています。
Windows では C-x, C-c, C-v に割り当てられているような機能です。 (私はやったことはありませんが、 [Options] の設定で Windows 系に割り当てることもできるようです)
キー コマンド 機能
C-w kill-region 切り取り
M-w kill-ring-save コピー
C-y yank 貼り付け

その他、次のようなコマンドもよく使います。
キー コマンド 機能
M-y yank-pop C-y の後に実行し、クリップボード(kill-ring)の履歴をたどって貼り付け。
C-k kill-line カーソルから行末までを切り取り

コピー、切り取りをしたものは Windows ではクリップボードにも格納されますが、 Emacs 内の kill-ring にも格納されます。 ring というのはリング(循環式)リストを指していて、 Emacs ではメモリー上の保存にはこのデータ構造がよく使われます。 M-y はその kill-ring から保存値を取り出して貼り付ける機能です。
また、簡単な Emacs-Lisp で C-y だけで履歴の貼り付けもできるようになります。 C-k に関しては kill-whole-line の変数を t(On) に設定していると、 行頭で実行した時に 1 行の削除となりちょっと便利になります。
(setq kill-whole-line t)
コピペ系の機能ではその他にも次のような機能があります。

マウス操作

マウスには結構編集系の機能が割り当てられているので、ここで説明します。
操作 機能
左クリック クリック位置にカーソル位置を移動
左ドラック 範囲選択
中クリック クリック位置に貼り付け
右クリック カーソル位置からクリック位置までを選択状態にして、コピー
ダブルクリックで切り取り

左ボタンは他のエディターなどと同じだと思います。

Unix では昔は 3 ボタン式で、中ボタンというものがありました。 今は PC もサーバーマシンもホイールマウスがほとんどだと思いますが、 実はこのホイールはクリックすることができます。 ちょっとクリックしずらいですが、これが中クリックにあたります。
また、中ボタンは選択にも使われます。 補完の選択候補を表示などで、マウスを持っていくとハイライトするものがあるのですが、 こういったものは中クリックで選択できます。

右ボタンのクリックによる選択とコピーは Windows の場合には選択のみでコピー(切り取り)までは行われないようです。 Windows では "明示的にコピーや切り取りを選択しないとクリップボードにはコピーしない" というセキュリティーポリシーがあるので、そのためかもしれません。


ちなみに、メニューの表示は一般的なアプリでは右クリックで表示されますが、 Emacs は Ctrl や Shift と合わせてクリックすることによって表示されます。
ただ、一般的なアプリと違って 位置や選択に対するメニューではなく、モード等で固定の内容です。 そのため、あんまり使うことはないかもしれません。

元に戻す、やり直し(Undo, Redo)

元に戻す(undo)コマンドは複数のキーに割り当てられています。
  • C-/
  • C-x u
  • C-_(アンダーバー)
Windows では一般的に C-z に割り当てられています。 コピー等の C-c, C-x と違い、 Emacs の C-z は画面の最小化 というほとんど使わない機能なので、 私は C-z に変更しています。
(global-set-key "\C-z" 'undo)
元に戻す(undo)の反対の機能でやり直し(redo)という機能があります。 これはちょうどブラウザーの "戻る" と "進む" のような関係です。
Emacs の場合はちょっと特殊で、 やり直しのコマンドはありません。 元に戻す処理をやっている時に C-g を押すと、戻す向きが逆になります。
emacs_base_undo_redo.png

検索

検索は 1 文字入力していく度に検索していくインクリメンタルサーチがよく使われます。
キー コマンド 機能
C-r isearch-backward 上方向にインクリメンタルサーチ
C-s isearch-forward 下方向にインクリメンタルサーチ

インクリメンタルサーチ中は次のようなキーが使えます。
キー 機能
C-w カーソル位置の単語を検索文字に設定
(さらに押すと対象が伸びる)
C-s ( C-r ) 次の検索結果に移動
開始直後の場合は、前回使った文字列で検索

emacs_base_search.png

インクリメンタルサーチの開始直後に [Enter] を押すと、 インクリメンタルではなくミニバッファーに文字列を入力してからの検索となります。 これは日本語やクリップボードの文字列を検索したい場合に使用します。

日本語の検索ではローマ字で日本語を検索する Migemo というパッケージもあります。 また、 検索機能にはフォルダー(ディレクリトー)をまたがる grep 検索もあります。

置換

Emacs では、一つ一つ問い合わせながら置換する逐次置換を行います。 これは次のキーで開始します。
  • M-%(query-replace)
逐次置換では対象文字、置換後の文字を入力した後、 下方向にバッファーを検索、移動していくので、そこで置換するかどうかを決め、 逐次移動していきます。

置換時の操作では次のキーをよく使います。
キー 機能
y[Space] 置換実行(1 つ)
n スキップ
! 残りすべての置換を実行
^ 前のマッチ位置に戻る
q[Enter] 中止
. 今の問い合わせを置換してから中止
? ヘルプ

M-% を押した直後の置換対象文字の入力で [Enter] を押すと 前回の検索文字、置換後文字で置換を開始します。
置換を使っていると途中で編集したいということがあると思います。
このため C-r で中断する機能もあります。 ただ、個人的にはちょっとややこしいので、 一旦中止して、先ほどの同じ条件での置換を行っています。

また、 Emacs の置換は賢く、設定によっては文字種を考慮して置換することができるようになっています。 例えば foo → bar の置換の場合、 Foo なら Bar 、 FOO なら BAR と置換します。

正規表現の検索と置換

次のキーでは正規表現を使った検索と置換ができます。
キー 機能
C-u C-r 正規表現で上方向にインクリメンタルサーチ
C-u C-s 正規表現で下方向にインクリメンタルサーチ
C-M-% 正規表現で逐次置換
正規表現を使った置換について詳しくは次の記事を見て下さい。 置換は正規表現を知っていると圧倒的に使いやすくなります。
以前、正規表現の知識を少しづつ身につけていけるような記事を書きました。 まだ知らない人は置換のところまででも構わないので、読んで見て下さい。
また、 Emacs の正規表現は今よく使われている Perl 拡張のものと微妙に違うので、 知っている人もざっとみておくとよいと思います。

補完

Emacs では補完をよく使います。そのうちの幾つかを紹介します。

dabbrev 補完

dabbrev 補完 は Emacs の補完の中でも私が特に便利だなと思う機能です。
  • M-/(dabbrev-expand)
これはバッファーの上方向にカーソルの前の単語が一致する単語を検索し、補完します。
それが望むものではなかった場合には、M-/ をさらに押していくと、 上方向に順に検索し、なければバッファー内、他のバッファーと検索していきます。

最初に上方向に検索していくので、前で使った変数などは長い名前でも数回のキー入力で済みます。 慣れると、これなしのコーディングは考えられなくなってきます。
VS などの IDE でも補完はできますが、 この機能の場合は言語を選びません。

モードごとの補完

M-[Tab] を押すとモードごとに違った補完になります。
モード 機能
Emacs Lisp モード 関数、変数などのシンボルの補完
Text モード スペルチェッカーの辞書を使った単語の補完
C, C++ モード Tags 機能を使った補完(後述)

プログラミング用機能

Emacs は様々なテキストの編集に使えますが、 もともとプログラムのコーディング向けなので、 プログラミング用の機能は充実しています。

コード編集

次のキーはコーディング中に非常に役に立ちます。 これらはまず覚えておいた方がいいでしょう。
キー 機能
[Tab] インデント
C-j 改行して、インデント
C-M-\ 範囲内をインデント
M-; コメント(単体でも、範囲内でも可)
モードにもよりますが、 [Tab] はインデントの機能で取られてしまいます。 普通にタブを入力したい場合は C-q [Tab]M-i を使います。

C-j で改行 + インデントですが、 C, C++ 言語などのモードでは {, ; などを入力したときに自動で改行、インデントする機能があります。 この機能を有効にしておくとコーディングが非常に楽になります。
これら以外にもコーディングに役立つ機能がいろいろと言語のモードごとに用意されています。
メインメニューにあるモードのメニューや C-h m で表示するヘルプで確認してみてください。

IDE 風の編集機能

使える言語は限られてきますが、 Emacs でも IDE 風の機能があります。


tags の機能を使うと Emacs で IDE のような関数の定義へのジャンプや補完(M-[Tab])ができます。 さらに auto-completeeldoc のパッケージを使うと、 IDE 風のポップアップによる補完やカーソル位置の関数定義の表示が行えます。 また、 auto-complete を利用すれば、 前述した dabbrev 補完をポップアップ表示で行うこともできます。

コンパイル

Emacs 上でコンパイルを実行することができます。
  • M-x compile
    • この後、 make などの実行コマンドを入力
Emacs でコンパイルする利点はコンパイラーの出力結果を使って、エラー個所にジャンプできる点です。
さらにこのジャンプ機能を利用しやすくする Lisp も書いてみました。 コンパイル用にエラー行の出力形式が正規表現で登録されています。 この正規表現のマッチ結果をもとにジャンプしているのですが、 エラー行が日本語化されているなどでマッチしない場合には機能は使えません。
こういう時は自分で正規表現を追加すると任意のコンパイルでこの機能が使えるようになります。 また、このコンパイル機能は Windows 環境でもコマンドライン上でビルドできるのであれば、 使用することができます。

デバッグ

M-x の後、 gdb, dbx, rubydb といったコマンドを実行すると それぞれのデバッガーが Emacs 上で動作します。

使い方は基本的にそのコマンドラインデバッガーと同じです。 上下 2 つのウィンドウ構成になり、上のプロンプトで通常どおりデバッガーを操作すると、 下のウィンドウに対応位置のコードを表示されます。
それ以外としては C-x [Space] のコマンドは覚えておいた方がよいでしょう。 表示しているコードの方で実行するとそこに breakpoint を付けることができます。


Windows 環境では コンパイラーに VS を使っている場合には Emacs でデバッグはできません。
ただ、デバッグのしやすさでは、 Emacs 派の私でも Emacs より VS の方が上かなと思います。

その他機能

キーボードマクロ

Emacs を使っていて同じ操作を繰り返すことがあるかもしれません。 こういった場合にキーボードマクロを使って操作を覚えさせることができます。
キー コマンド 機能
C-x ( kmacro-start-macro マクロの記録開始
C-x ) kmacro-end-macro マクロの記録終了
C-x e kmacro-end-and-call-macro マクロの実行

Diff

Emacs では差分ビューワーばりに見やすく差分を表示することができます。
しかも Emacs ですからそのまま編集できますし、編集中のバッファーの差分もみれます。

シェル

Windows しか使ったことがない人はあまり使ったことがないかもしれませんが、 Unix ではコマンドライン上でプログラムを起動したり、 ファイルを操作したりするシェルが使われます。
これはこれで便利なので、 Windows でも使えば生産性が上がることもあると思います。

特に Emacs では eshell という Emacs 用のシェルがあります。 これは M-x eshell で起動します。
eshell であれば、シェル上から Emacs の操作ができたり、ang-ftp を使って、 リモートのファイルを通常のファイルのようにコピーできたりします。

Emacs のコードハイライトをブログや Word で利用

ブログなどの Web 上でハイライトしたコードを表示したい場合は JavaScript のライブラリーを使うのが一般的だと思います。 ただ、それだと超メジャーな言語しか対応していないことが多いです。
それに対して、Emacs では膨大な量の言語に対応しています。 htmlize というパッケージを使えば、 この Emacs のコードハイライトを利用して、ハイライトしたコードの html 片を簡単に得ることができます。 また、 htmlize で作成した html ファイルを一旦 IE で表示し、 それをコピペすれば、 MS Word にもハイライトしたコードを貼り付けることができます。

最後に

今回はいろいろと Emacs の機能を紹介してきました。 しかし、これでもまだまだ Emacs の さわり ぐらいです。
しかも、デフォルトでついている機能を中心に紹介しているので、 パッケージをインストールすれば、 Emacs の機能はさらに広がります。 私も結構長いこと使っていますが、"こんなこともできたんだ" という驚きが今だにあります。 この記事がそんな奥の深い Emacs のはじめの一歩になれば と思います。


関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
10位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

10月 | 2017年11月 | 12月
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。