LinuxでのC言語開発環境について〜環境設定indent.proの例〜

  • メモ
    • indentのバージョン2.2.10以上は -linux で同等
    • バージョン2.2.9以下は下記の設定をする
  • 下記の設定をする
export INDENT_PROFILE=${HOME}/.etc/indent.pro
  • .etc/indent.pro
-nbad -bap -nbc -bbo -hnl -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -d0 -di1 -nfc1 -i8 -ip0 -l80 -lp -npcs -nprs -npsl -sai -saf -saw -ncs -nsc -sob -nfca -cp33 -ss -ts8 -il1

LinuxでのC言語開発環境について〜環境設定.screenrcの例〜

  • メモ
    • いろんなサイトを参考(多すぎて覚えてない)
    • 縦分割対応のバージョンをコンパイルして使用
  • ファイルリスト
.screenrc
.etc/screenrc
  • .scrrenrc
source .envfiles/screenrc
  • .etc/scrrenrc
################
# 基本設定
vbell off
windows
deflogin off
defflow off
autodetach on

################
# MSG
lastmsg
startup_message off
# Bell代わりのMSG
bell_msg "Bell on Window %n (%t)"
# MSG表示秒数
msgwait 3
msgminwait 1
pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended."

################
# 文字コード設定
# euc utf8 sjis
#kanji utf8 
defkanji utf8 
defencoding utf8 
#cjkwidth on

################
# copy mode バックログ保存行数
defscrollback 9999

################
# zombie コマンド引数指定、screen中でプロセス死時、指定キーを押すまでウインドウ残。
# 設定してないとプロセスエラーメッセージが残らず消えてしまう
# ^[ = ESC
zombie "^["

################
# xterm tweaks
# # xterm-52 tweaks:
# # - uses background color for delete operations
# termcapinfo xterm* be
termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'


################
# hardstatus(画面下)を変更
# %H:ホスト名,%n:Window番号,%f:フラグ,%t:Window名,%0c,時間  -Lw~+Lw:Window一覧
hardstatus alwayslastline "%{= rw} %H %{= wk}%-Lw%{= bw}%n%f %t%{= wk}%+Lw %{= wk}%=%{= gk} %Y/%m/%d(%D) %0c "
#caption always "%{= wk} %-w%{=bu dr}%n %t%{-}%+w %= %{=b wb}%Y/%m/%d(%D) %{=b wb}%c"

# 表示方法設定
# sorendition "+rb .G"

# 各ウィンドウ毎の下部表示を設定 1.初期化 2.実行プログラム指定
#"         " -- (1)区切り
# %{    }    -- (2)装飾指定
#   = dd     -- (3)=:クリア, :装飾なし,d:背景色default,d:背景色default
#        %`  -- (4)次行backtick表示指示
#caption always "%{= dd}%`"
#backtick 0 0 0 sudo ruby logmonitor.rb

# screen中から起動するプロセスに渡す$TERM
#OSにscreen-256colorのterminfo必要
# Debian 系なら ncurses-term
#term screen-256color

# 新規ウィンドウ名を設定
shelltitle "$ |bash"
# screen -l 0

# screen起動時の起動設定
shell -${SHELL}

################
# キーアサイン設定
# register U "export DISPLAY=\":0.0\"\012"
# register L "export DISPLAY=\"localhost:1\"\012"
# register [ "\033:se noai\015a"
# register ] "\033:se ai\015a"
# bind F paste U
# bind f paste L
# bind ^] paste [.]
# screenコマンド開始キーをCtrl+kに変更 デフォルトはCtrl+a
escape ^Kk
# w でWindow一覧
bind w windowlist -b
# 分割サイズを変更する r で変更開始 j,kでサイズ変更
bind r eval 'echo "Resize window"' 'command -c resize'
bind -c resize ^]  command
bind -c resize j eval 'resize +1' 'command -c resize'
bind -c resize k eval 'resize -1' 'command -c resize'

LinuxでのC言語開発環境について〜環境設定.vimrcの例〜

  • メモ
    • いろんなサイトを参考した(多すぎて覚えてない)
  • ファイルリスト
.vimrc
.etc/vimrc
  • .vimrc
source $HOME/.etc/vimrc
  • .etc/vimrc
"---------------------------------------------------------------------------
" 検索の挙動に関する設定:
"
" インクリメンタルサーチ設定
set incsearch
" 検索時に大文字小文字を無視 (noignorecase:無視しない)
set ignorecase
" 大文字小文字の両方が含まれている場合は大文字小文字を区別
set smartcase

"---------------------------------------------------------------------------
" 編集に関する設定:
"
" インデントするときの挿入するタブの幅
set shiftwidth=4
" KB入力するときの挿入するタブの幅 0==tabstop, !0=softtabstop
set softtabstop=4
" タブの画面上での幅
set tabstop=4
" タブをスペースに展開しない (expandtab:展開する)
set noexpandtab
" インデント設定  autoindent,smartindent,cindent
"set autoindent
" cindent時の詳細設定 cinoptions-values参照
"set cinoptions=
" バックスペースキー動作設定
"set backspace=indent,eol,start

"---------------------------------------------------------------------------
" 文字コード設定
set encoding=utf-8
"set fileencodings=cp932,utf-8,eucjp
set fileencodings=utf-8,eucjp,cp932
set fileformats=unix,dos
set hlg=ja

"---------------------------------------------------------------------------
" GUI固有ではない画面表示の設定:
"
" 行番号を非表示 (number:表示)
set nonumber
" ルーラーを表示 (noruler:非表示)
set noruler
" ソースコード折りたたみ機能を有効にする
" 設定数種類  manual,indent,expr,syntax,diff,marker
" zo:開く  zc:閉じる  zO,zC:再帰的に
"set foldmethod=syntax
" カーソル上下行数 999なら常に中央
set scrolloff=999
" カーソル行に下線
set cursorline

"---------------------------------------------------------------------------
" 色設定
" 8     SpecialKey      スペシャルキー、^@など表示できない文字
" @     NonText EOF以降の~など
" d     Directory       CTRL-Dで表示したディレクトリ
" e     ErrorMsg        エラーメッセージ
" f     Folded  折り畳まれた行
" F     FoldColumn      フォールドコラム
" i     IncSearch       インクリメンタルサーチの結果
" l     Search  最後の検索結果
" m     MoreMsg -- 継続 -- のようなMoreメッセージ
" M     ModeMsg -- 挿入 -- などのモードメッセージ
" n     LineNr  行番号
" r     Question        hit-enterやyes/noなどの質問
" s     StatusLine      ステータスライン
" S     StatusLineNC    アクティブではないウィンドウのステータスライン
" t     Title   :set allや:autocmdなどで表示される「--- オプション ---」のような文字
" c     VertSplit       縦方向へのスプリットの境界
" v     Visual  ビジュアルモードの選択範囲
" V     VisualNOS       ビジュアルモードの選択範囲(Vimがアクティブではないとき)
" w     WarningMsg      警告メッセージ
" W     WildMenu        ワイルドメニュー
" たとえば、set highlight=n:ErrorMsg とすると、行番号がErrorMsgで指定した色に設定される。
"

" 全角スペース可視化
scriptencoding utf-8
augroup highlightIdegraphicSpace
  autocmd!
  autocmd Colorscheme * highlight IdeographicSpace term=underline ctermbg=DarkGreen guibg=DarkGreen
  autocmd VimEnter,WinEnter * match IdeographicSpace / /
augroup END
colorscheme  default

" タブと行末の空白を可視化 test→
set listchars=tab:^_,trail:~
" タブや改行を表示
set list
"highlight SpecialKey cterm=underline ctermbg=white ctermfg=blue
highlight SpecialKey cterm=underline ctermbg=gray ctermfg=gray

"------------------------------------
" .pcファイルをファイルタイプ.esqlcとして開く
au BufRead,BufNewFile *.pc     setfiletype esqlc
" 下記の設定は~/.vim/syntax/にdownloadしたproc.vimをcpすること
"au! BufRead,BufNewFile *.pc     setfiletype proc

"---------------------------------------------------------------------------
"ステータスライン関係
"ステータスラインを常に表示 0:nerver 1:if there two window
set laststatus=2
" ステータスライン表示内容 文字コード,改行,ファイル名
set statusline=[%{&fileencoding}][\%{&fileformat}]\ %F%m%r%=<%c:%l>

"---------------------------------------------------------------------------
" GNU Globalの設定
"Ctrl+t :Gtags と入力する
"Ctrl+h :カーソル下文字列でcurrentのソースコードの grep
"Ctrl+i 開いているファイルに定義されている関数の一覧を表示
"Ctrl+j カーソル位置の関数へジャンプ
"Ctrl+n 次の検索結果へジャンプする
"Ctrl+p 前の検索結果へジャンプする
map <C-t> :Gtags
map <C-h> :Gtags -gl<CR>
map <C-i> :Gtags -f %<CR>
map <C-j> :GtagsCursor<CR>
map <C-n> :cn<CR>
map <C-p> :cp<CR>
":Gtags 関数名        | 関数名 → ソースコード(定義)
":Gtags -r 関数名         | 関数名 → ソースコード(参照)
":Gtags -f ファイル名 | ソースコード → 関数一覧
"global -c 関数名一部 | 関数名の一部 → 関数一覧
":Gtags -g 検索文字列 | ソースコードの grep

LinuxでのC言語開発環境について〜環境設定.bashrcの例〜

  • メモ
    • いろんなサイトを参考した(多すぎて覚えてない)
  • ファイルリスト
.bashrc
.etc/env.sh
.etc/bashrc
  • .bashrc
if [ -f ~/.etc/env.sh ]; then
    . ~/.etc/env.sh
fi
if [ -f ~/.etc/bashrc ]; then
    . ~/.etc/bashrc
fi
  • .etc/env.sh
######################################## 
# 環境の設定

#export LANGUAGE=ja_JP.SJIS
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
export TZ=JST

# Subversionでコミットコメント書く際のエディタ設定
export SVN_EDITOR='vim'

# indentコマンドで自動設定される設定値ファイル
export INDENT_PROFILE=${HOME}/.etc/indent.pro

# 編集ツールをviに設定
export EDITOR=vi

# man とかを見るときはいつも less を使う
#export PAGER=less

# LESSの設定
#export JLESSCHARSET=japanese-sijs
#export LESSCHARSET=japanese-sjis
export LESS='-c -m -x4'
#export LESS="-isnMCd"
#export LESS='-X -F -i -m'
#export LESSCHARSET="latin1"
#export LESSCHARDEF=8bcccbcc18b95.33b33b.
#export LESSBINFMT='*n-'
#export LESSOPEN="|/usr/bin/lesspipe.sh %s"

# manの設定
#export MANPATH=/usr/bin/man:/usr/local/man:/usr/share/man:/sw/man
#export MANPAGER=/usr/bin/less
#export MANWIDTH=80

# パスの設定
export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:$HOME/bin
#export RUBYLIB=$HOME/lib/ruby
#export PERL5LIB=$HOME/lib/perl

######################################## 
# alias設定
alias ls='ls -F --color'
alias ll='ls -l'
alias lh='ls -lh'
alias ld='ls -ld'
alias l='ls'
alias sl='ls'
alias la='ls -A'
alias lla='ls -lA'
alias llr='ls -ltrA'

# サイズはK,M,Gで表示
alias df='df -h'
alias du='du -h'

alias 644='chmod 644'
alias 755='chmod 755'

alias view='vi -R'

# 拡張正規表現,色づけ
export GREP_COLOR='1;37;41'
alias grep='grep -E --color=auto'

# -iは確認を行う。-vは詳細な情報の表示
alias cp='cp -iv'
alias mv='mv -iv'
alias rm='rm -iv'

# odは16進数でのバイナリダンプコマンド
# -tx1zは、1バイトごとに区切って表示
# -Axはアドレスを16進数表示、-vは連続する0をスキップしない
alias od='od -tx1z -Ax -v'

alias cdp='cd -P'
alias pwdp='pwd -P'
  • .etc/bashrc
########################################
# 自環境の設定
# 新しく作られたファイルのパーミッションがつねに 644 になるようにする
umask 022

# core作る
ulimit -c unlimited
# core作らない
#ulimit -c 0 

########################################
# historyの設定

#---------------------------------------
# 各端末間で履歴の共有をする
function share_history {  # 以下の内容を関数として定義
        history -a  # .bash_historyに前回コマンドを1行追記
        history -c  # 端末ローカルの履歴を一旦消去
        history -r  # .bash_historyから履歴を読み込み直す
}
# 上記関数をプロンプト毎に自動実施 後で設定
#PROMPT_COMMAND='share_history'  
shopt -u histappend   # .bash_history追記モードは不要なのでOFFに

#---------------------------------------
# "!"をつかって履歴上のコマンドを実行するとき、
# 実行するまえに必ず展開結果を確認できるようにする。
shopt -s histverify

#---------------------------------------
# 履歴のサイズ。
export HISTSIZE=19999  # 履歴のMAX保存数を指定
# export HISTFILESIZE=49999 #ファイルに格納する保存数HISTSIZEと同じなので省略

#---------------------------------------
# 記録する内容を設定
# ignoredups:入力が最後のヒストリと一致する場合に記録しない
# ignorespace:スペースやタブで始まる行をヒストリに記録しない
# ignoreboth:ignorespaceとignoredups両方を指定
# 指定なし:すべての入力をヒストリに記録する
export HISTCONTROL=ignoredups
# 履歴に入れないもの
HISTIGNORE="ls:la:ll:h:H:cd"

#---------------------------------------
# 履歴にタイムスタンプを追加
#export HISTTIMEFORMAT="%y/%m/%d %H:%M:%S: "
export HISTTIMEFORMAT='%Y-%m-%d %T: '

#---------------------------------------
# Ctrl+R の検索は使いづらいので下記を追加
# h: 直前の履歴 30件を表示する。引数がある場合は過去 1000件を検索する。
# (history で履歴全部を表示させると多すぎるので)
function h {
        if [ "$1" ]; then history 1000 | grep "$@"; else history 30; fi
}
# H: 直前の履歴 30件を表示する。引数がある場合は過去のすべてを検索する。
function H {
        if [ "$1" ]; then history | grep "$@"; else history 30; fi
}

#---------------------------------------
# fcコマンド拡張
#function fceditor ()  {  tt=/tmp/$$.sh; cat $1 | ( read -rd '' s; t=/tmp/$$; echo "function a(){" > $t; echo "$s" >> $t; echo -e " }\n declare -f a" >> $t; chmod +x $t; $t > /dev/null 2>&1; if [ $? = 0 ]; then a=`$t|sed '1,2d;$d;s/....//'`";"`echo "$s"|tail -1|sed 's/^.\+\(#[^#]\+\)$/\1/'`; else a="$s"; fi; rm $t; echo "$a" ) > $tt; vim $tt; sed 's/^ *//' $tt > $1; rm $tt; }
#export FCEDIT=fceditor

########################################
# 端末・プロンプトの設定

#---------------------------------------
# 色設定
export CR="$(echo -ne '\r')"
export LF="$(echo -ne '\n')"
export TAB="$(echo -ne '\t')"
export ESC="$(echo -ne '\033')"
export C_BLACK="${ESC}[30m"
export C_RED="${ESC}[31m"
export C_GREEN="${ESC}[32m"
export C_YELLOW="${ESC}[33m"
export C_BLUE="${ESC}[34m"
export C_MAGENTA="${ESC}[35m"
export C_CYAN="${ESC}[36m"
export C_WHITE="${ESC}[37m"
export C_HIGHLIGHT_BLACK="${ESC}[30;1m"
export C_HIGHLIGHT_RED="${ESC}[31;1m"
export C_HIGHLIGHT_GREEN="${ESC}[32;1m"
export C_HIGHLIGHT_YELLOW="${ESC}[33;1m"
export C_HIGHLIGHT_BLUE="${ESC}[34;1m"
export C_HIGHLIGHT_MAGENTA="${ESC}[35;1m"
export C_HIGHLIGHT_CYAN="${ESC}[36;1m"
export C_HIGHLIGHT_WHITE="${ESC}[37;1m"
export C_DEFAULT="${ESC}[m"

#---------------------------------------
# 現在のユーザによってプロンプトの色を変える。 rootは赤
case "$UID" in
0) U_col=${C_RED};;
*) U_col=${C_GREEN};;
esac

#---------------------------------------
# screenの時はwindow番号をホストの後につける
# sshで入っているときは、アクセス元IPをさらにその後ろにマゼンダで
PS_USER="\[${U_col}\]\u\[${C_DEFAULT}\]"
PS_HOST="\[${C_GREEN}\]\h\[${C_DEFAULT}\]"
PS_WORK="\[${C_HIGHLIGHT_CYAN}\]\W\[${C_DEFAULT}\]"
PS_HIST="\[${C_HIGHLIGHT_BLUE}\]\!\[${C_DEFAULT}\]"

if [ -n "${SSH_CLIENT}" ] ; then
        PS_SSH="\[${C_MAGENTA}\]/$(echo ${SSH_CLIENT} | sed 's/ [0-9]\+ [0-9]\+$//g')\[${C_DEFAULT}\]"
else
        PS_SSH=""
fi

if [ -n "${WINDOW}" ] ; then
        PS_SCREEN="\[${C_CYAN}\]#${WINDOW}\[${C_DEFAULT}\]"
else
        PS_SCREEN=""
fi

#---------------------------------------
# [ (ユーザ名/黒) @ (ホスト名/緑) (履歴番号/青) : (ワーキングディレクトリ/明るい白) ] \$
#export PS1="[${PS_USER}@${PS_HOST}${PS_SCREEN}${PS_SSH} ${PS_HIST}:${PS_WORK}]\$ "
# 長いので短く
export PS1="[${PS_USER}@${PS_HOST}${PS_SCREEN} ${PS_HIST}:${PS_WORK}]\$ "


########################################
# その他function定義
# つねに直前のコマンドの終了状態をチェックさせる。
# もし異常終了した場合は、その状態(数値)を表示する。
function showexit {
        local s=$?
        if [[ $s -eq 0 ]]; then return; fi
        echo "exit $s"
}
function prompt_cmds {
        showexit
        share_history
}
PROMPT_COMMAND=prompt_cmds

# globalコマンドで関数名検索時に関数名補完させる
function global_funcs() {
        local cur
        cur=${COMP_WORDS[COMP_CWORD]}
        COMPREPLY=(`global -c $cur`)
}
complete -F global_funcs global

LinuxでのC言語開発環境について〜使用ソフト〜

  • メモ
    • よくある環境を想定:WindowsクライアントからLinuxサーバに接続してC言語開発
    • 初心者に説明する用のメモ

使用ソフト一覧

クライアント(Windows)
  • ダウンロードしてインストール。Xクライアントは任意。
  • 参考リンクで使用方法を覚えてもらう。
ソフト名 カテゴリ 詳細
teraterm telnet/sshクライアント サーバを操作するためのソフト 同種ソフト(Poderosa,putty)
FileZilla ftp/sftpクライアント サーバとのファイル送受信するためのソフト 同種ソフト(FFFTP,WinSCP)
Xming Xクライアント サーバのGUIをクライアントに表示できる 同種ソフト(Astec-X)
サーバ(Linux)
  • 下記は必須ソフト、サーバにない場合、管理者に相談
  • 参考リンクで使用方法を覚えてもらう
ソフト名 カテゴリ 詳細
bash シェル Linuxをコンソールで操作する環境
vim エディタ Linuxで使用されるエディタ 使用方法が独特
gcc コンパイラ フリーで使用できるコンパイラ(c/c++など複数言語対応)
gdb デバッガ gccで作成したプログラムをテストできる
make コンパイル支援 動作定義にしたがってコンパイルできる
  • 下記は必要に応じて。
ソフト名 カテゴリ 詳細
zsh シェル bashより補完が高機能
screen コンソール支援 コンソール操作で画面を複数開ける
lcov カバレッジ確認 コードのテスト済みを確認できる
indent コードスタイル統一 ソースコードのスタイルを統一できる
gtags,global(GnuGlobal) コード閲覧支援 ソースコードを解析して、閲覧しやすくする
doxygen コード閲覧支援 ソースコードを解析して、閲覧しやすくする
git バージョン管理 ファイルの変更履歴を管理する
subversion バージョン管理 ファイルの変更履歴を管理する 仕事ではまだこっちが主流

ソフト環境設定

クライアント(Windows)
  • 普通はメニューから選べる
ソフト名 設定項目
teraterm 接続ホスト情報、文字コードなど
FileZilla 接続ホスト情報、文字コードなど
Xming 接続ホスト情報、文字コードなど
サーバ(Linux)
  • Linuxでは設定はファイルに記述
  • 例は次エントリからを参照
ファイル名 使用ソフト 詳細
~/.bashrc bash 環境変数や補完動作などを設定
~/.zshrc zsh 環境変数や補完動作などを設定
~/.vimrc vim 表示やファイル単位の見栄えなどを設定
~/.screenrc screen 見栄えなどを設定
~/.globalrc global(gtags) 解析ファイル規則などを設定
~/indent.pro indent コードスタイルを設定 Ver2.2.10以上なら-linuxで。それ以外なら-linuxと同等設定を記述
doxyfile doxygen 解析ファイル規則、出力内容などを設定

Ruby,Perl,Pythonのメモ〜文字コード指定のまとめ〜

メモ:
・日本語の取り扱いのメモ のまとめ
・バージョンはruby 1.9.1p129,perl v5.10.0,Python 3.0.1

ruby perl python
参考 bitclust
M17N の設計と実装
Encode入門
perl - use encoding; #は黒歴史
@IT記事
基本的な考え方 外部文字コードを内部文字コードに変換し、内部文字コードが何かを意識して処理する 内部はUTF8で外部のコードを内部コードに変換して処理 内部はUnicode(UTF16orUTF32?)で外部のコードを内部コードに変換して処理
ソースコード文字コード コード冒頭に文字コード指定 基本的にUTF8で書く コード冒頭に文字コード指定
文字列 オブジェクト毎に文字コード定義 バイナリとUTF8フラグ付き文字列 Unicode(UTF16orUTF32?)文字列のみ
文字列長 文字コード指定が正しいなら文字数 utfフラグ付きなら文字数 code unit数(文字数でない)*1
configureで--with-wide-unicodeすれば文字数
ファイルオープン File.open(filename,"r:<ファイルの文字コード>:<プログラム内の文字コード>") open $fh, "<:encoding(<ファイルの文字コード>)", $filename f = codecs.open(filename,"r",<ファイルの文字コード>)
ファイルオープンのメモ ファイルの文字コードと取得する文字列の文字コードを指定する
ファイルの文字コードのみを指定するとその文字コードの文字列を得る
ファイルの文字コードとプログラム内の文字コードを同一に指定するとwarningが出る
ファイルの文字コードを指定して、utf8フラグ付きの文字列を得る ファイルの文字コードを指定してUnicode文字列を得る
引数・引数オプション処理 localeのまま取得?
(でもwarning出る)
内部で変換する locale→Unicode文字列に自動変換?
引数ライブラリ OptionParser Getopt::Long英語
Getopt::Long日本語
optparse英語
optparse日本語

Ruby,Perl,Pythonのメモ〜ディレクトリ読み込み〜

メモ:
・日本語の取り扱いのめも その2(ファイル名について)
・バージョンはruby 1.9.1p129,perl v5.10.0,Python 3.0.1

ruby perl python
文字コード localeのまま取得? 内部で変換 locale→Unicode文字列に自動変換?



ソースコードutf-8、コンソール:utf-8

Ruby

#!/usr/local/bin/ruby
# coding: utf-8

require 'pathname'

Pathname("./test_dir/").children(false).sort.each{|path|
  puts path
  #puts path.to_s.encoding
}

Perl

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use feature ":5.10";
use Encode;

binmode(STDOUT, ':utf8' );

# ファイル名取得
opendir my $dh, './test_dir/' or return;
my @files = sort grep !/^\.+$/, readdir($dh);
closedir $dh;

my @files_utf = map { Encode::decode('utf8',$_) } @files;
foreach my $fname(@files_utf){
  say $fname;
  #say utf8::is_utf8($fname)
}

Python

#!/usr/local/bin/python3.0
# -*- coding: utf-8 -*-

import os
fnames = os.listdir("./test_dir/")
fnames.sort()
for fname in fnames:
  print(fname)

ファイル名一覧

$ ls -a ./test_dir/
.  ..  .dot_file  .日本語ファイル  noJpFile  日本語ファイル

結果

.dot_file
.日本語ファイル
noJpFile
日本語ファイル