ドラえもん電子書籍化に寄せて: ドラえもんと私
書こう書こうと思いながら随分時間が立ってしまったけど、ドラえもん電子書籍化のニュースがあった。
「ドラえもん」電子書籍化、てんとう虫コミックス1〜45巻とデジタルカラー版Vol.1〜141を配信開始 -INTERNET Watch
現在既に電子書籍版が販売されており、気付いたらKindle版も販売されている。
元々 キンコーズで電子書籍用に1冊108円で断裁してもらったお話と個人的な自炊のお話。 - ゆず日記 で電子書籍への移行を進めていて、ちょっと前の50%還元セールの際にマンガもKindle版があるものはすべてKindleで買い直し、手元のコミックスはマーケットプレイスとブックオフで売ってしまった。
OreillyはEbook Storeがあるし、他の技術書や新書はそのまま電子書籍版を買う。もし電子書籍がなければ紙の書籍を買って断裁しScanSnapで取り込んで...とすっかり本棚不要の生活になった。
出版社により書籍との遅れがある場合もあるが、自分が買っているマンガは最新刊発売日の0時頃に手元のKindleに配信されるし、自宅, オフィス, カフェ, 何処でもKindleから600冊強の書籍にアクセスできる環境が魅力である。
元々持ってたデカい本棚は引っ越しの際に処分した。
ちなみに、ジョジョのコミックスはアニメの影響もあってか1〜7部が高値で売れてしまった。 10年以上前から全巻新品で購入していた品で、(63 + 17 + 24)巻 * 420 = 43,680円掛かっていたが、30,000円で売却できた。 文庫本ベースのKindleモノクロ版を全部購入すると34,600円、50%ポイントセール時に買ったので携帯電話会社風にいうと実質17,300円だったので、手元のお金が12,700円増える形でKindle版に移行できたことになる。
カバー裏の荒木先生のコメントや、「あーん!スト様が死んだ!」とかが読めなくなるのはデメリットだが、本棚スペースが不要になるメリットの方が自分には大きかった。
15年程前から紙媒体で揃え続けていたけど、収支プラスで移行出来るとは不思議なものだなぁと思った。
話を戻して、これで自分にとっては本棚に最後まで残り続けたドラえもんコミックスとはお別れとなるので、ちょっとの間SF(すこし・ふしぎ)なドラえもん語りをしたい。
ドラえもんとの出会い
初めて読んだマンガはドラえもんだった。
何歳だったかはもう憶えてないが、物心ついた頃から家にはドラえもんがあった。
カバーが無いものや、汚れているものがあったので、兄の為に中古本も含めて親が買ってくれたものかも知れない。
最初はコマを追う順番も分からず、漢字のルビも言葉の意味もよく分からなかったが、少し大きくなってからは弟に読み聞かせをしたりしていた。小学時代の国語の音読がスラスラ読めたのはドラえもんのお陰だ。 夏休みにチョコアイスを食べながら読んでて落として5巻を茶色く汚してしまったのもいい思い出だ。
いろんなことを学んだドラえもん
日食*1 太陽と月の視直径の違いを知ったのはドラえもんである。
盲点*2の存在を知ったのもドラえもんである。
刷り込み*3も、亡命*4も、光ファイバー*5も、
水が酸素と水素から構成されていること*6を知ったのもドラえもんである。
あれもこれもすべてドラえもんである。
信長の野望で日本史を学び、桃鉄で地理を学ぶというが、ドラえもんは理科も社会も学べてしまうのである。凄い。
スネ吉の広角レンズの絞りの話*7なんて一眼レフを買った今年になって初めて意味が分かった。
のび太とスネ夫がお互いにミサイルを所有しているシーンが冷戦*8を皮肉ったものだったりと、後になって気付かされるネタも多い。
ちなみに、しずちゃん*9が人間製造機*10の話でなぜあんなに怒るのか分かるまで10年位掛かった。
脱線
ちなみに幾つか版を重ねる中で、改変された内容がある。
28巻: 「なぜか劇がメチャクチャに」 は内容が大きく書き換えられている。
実家にあった版では、チビ黒サンボの劇を行うシーンがあるのだが、10年前に買い直した版ではそのシーンがまるまるカットされてしまっている。
参考: http://www.geocities.co.jp/Playtown-Dice/6159/d-28.html
他にも、ごみすてばがごみだしばになっていたりと、ドラえもんも差別問題による影響を大きく受けている。
参考: 復元光線 Case4
別にコレくらいいいのでは... と思うものも多いのだが、読者数が多く影響が大きいだけに気を遣わなければならないことも多いのかと思う。 元のものが読みたければ、今では藤子・F・不二雄大全集に、てんとう虫コミックス未収録の話も含めて全話掲載されているのでこちらもオススメ。(早く電子書籍化して欲しい。)
- 作者: 藤子・F・不二雄
- 出版社/メーカー: 小学館
- 発売日: 2009/07/24
- メディア: コミック
- 購入: 8人 クリック: 483回
- この商品を含むブログ (95件) を見る
多分1番好きな話
23巻: 「ぼくよりダメなやつがきた」 である。のび太よりダメな多目くんが引っ越してくる話だ。
- 作者: 藤子・F・不二雄
- 出版社/メーカー: 小学館
- 発売日: 1981/12/19
- メディア: コミック
- 購入: 1人 クリック: 4回
- この商品を含むブログ (5件) を見る
多目くんは名前通りダメな子で、のび太より勉強も運動もできない。
先生やジャイアンからいつもいびられてたのび太は、自分よりダメなやつが来たことで社会的カーストの最下層から脱するが、今までの劣等感の反動からか今度は多目くんを馬鹿にしだす。
一見仲良さそうに一緒に宿題をしだすが、モクモク頑張る多目くんと、すぐに飽きだすのび太。ジャイアンに野球に誘われるが、自分は参加したくないので多目くんを代わりに推薦する。
見かねたドラえもんが、のび太の行動を省みさせることで過ちに気付かせ、ジャイアンに野球の責任を問われてバットで殴られそうな多目くんを、のび太が助けに入るという内容だ。
この話は子供ながらに深く考えさせられた。
また、この話の苦手な勉強でも投げ出さずにモクモク努力する多目くんの姿勢にも学ばされた。*11
藤子先生はよくインタビューで「のび太は私なんです。」という話をしていた。 藤子先生も小学生時代、勉強も運動もダメで、ドジでよく先生に叱られていたという。全国にいる悩める子供たちが、つらい時でもドラえもんを読んで、自分よりドジなのび太を見て元気を出して欲しい。といったメッセージだった。
私も小学生時代、勉強こそそれなりには出来たが運動がからっきしダメで、小学生時代に運動が出来ないというのは社会的カーストの下層になりがちである。当時はつらい思いをすることが多かった中で、のび太に自己投影していた1人として、ドラえもんに救われ、知識も得て、のび太の行動から学ぶ。
そういった経験をドラえもんは私に残してくれた。
〆
流石にこのコミックスを処分してしまうのはしのびないので、実家に送って取って置くつもりだ。 ドラえもんが連載されていたのが19xx-19xx年、自分の生まれは1984年。それでも時代の変化に何の抵抗も無く読むことが出来た。 今の子供達がドラゴンボールを普通に受け入れてくれるのと同じくらい、違和感なく受け入れてくれる作品だと思う。
それはコミックスという媒体から電子書籍になっても変わらないものだと思っている。 いつか子供にもKindleとセットでプレゼントしたい。
最後に小学六年生の3月号に頻繁に掲載された話、つまり小学生がドラえもんの掲載誌から卒業する最後の号の話。また、大山のぶ代版アニメドラえもん最終話としても放送された話である、「45年後・・・」*12から、あのセリフを引用させてもらって〆たい。
きみはこれからも何度もつまづく。 でもそのたびに立ち直る強さももってるんだよ。
私はまた一つ、ドラえもんという作品に救われたのかもしれない。
ぜひ ドラえもんプラスや大長編ドラえもん、藤子F不二雄全集のKindle化も期待して筆を置こうと思う。
それではまだどこかで。
Vim でjsonファイルを開いた時にチラつくダブルクォーテーションを何とかしたお話。
Vimでjsonファイル編集時にダブルクォートが非表示になり、カーソル行だけダブルクォートが表示される(表示される分だけテキスト位置がズレる)現象が。
こんな感じ。ぶっちゃけかなりイライラする。
んーvim-jsonも入れてないけど何でだろ?ということで /Applications/MacVim.app/Contents/Resources/vim/runtime/syntax/json.vim
を確認してみた所、
" NOTE that for the concealing to work your conceallevel should be set to 2 " Syntax: Strings " Separated into a match and region because a region by itself is always greedy syn match jsonStringMatch /"\([^"]\|\\\"\)\+"\ze[[:blank:]\r\n]*[,}\]]/ contains=jsonString if has('conceal') > syn region jsonString oneline matchgroup=jsonQuote start=/"/ skip=/\\\\\|\\"/ end=/"/ concealends contains=jsonEscape contained else > syn region jsonString oneline matchgroup=jsonQuote start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=jsonEscape contained endif
とドンピシャな箇所がありまして、:help conceallevel
してフムフムとしながら.vimrcに
autocmd Filetype json setl conceallevel=0
と書いたら解決した。
MacVimでは、Custom Version 7.4 (KaoriYa 20141204) にアップデートしたタイミングでjson.vimが更新されていた。
Conceal機能
concealは隠す、秘密にするの意。
要はjsonでいうダブルクォーテーションのような、構文としては必要だが視認性を妨げるものを非表示にできる機能のようだ。
後述の concealcursor
や conceallevel
で挙動を変更可能。
concealcursor
カーソル行のテキストを Conceal表示するモードをセットする
concealcursor | 説明 |
---|---|
n | ノーマルモード |
v | ビジュアルモード |
i | 挿入モード |
c | コマンドライン編集 |
試しに :set concealcursor
してみたらi
がセットされていた。
conceallevel
conceallevel | 説明 |
---|---|
0 | 通常通り表示(デフォルト) |
1 | conceal対象のテキストは代理文字(初期設定はスペース)に置換される |
2 | conceal対象のテキストは非表示になる |
3 | conceal対象のテキストは完全に非表示 |
conceallevel=0
が従来通りの表示。
conceallevel=2
だとカーソル行がダブルクォーテーション分だけずれて見づらい。
conceallevel=1
はスペースで置き換わっているため、ズレがなくカレント行にした時のみダブルクォーテーションが表示され、スッキリしていて見易いので最終的にはこっちを使うことにした。
まとめ
最終的には以下の設定にして様子見することにした。
if has('conceal') set conceallevel=1 concealcursor= endif
本来は conceallevel=0 concealcursor=
の為、今回のMacVimのアップデートで同症状が出る人は限られると思う。
自分の環境では別のpluginの設定箇所で set conceallevel=2 concealcursor=i
をしていたのでトラブルに見舞われた。
もし同様の症状が起きていたら、どこかでconceallevelを変更してないか確認してみるといいですね。
VimでPython書いてる時に出るメソッドプレビューを消すお話。
set completeopt-=preview
いまさら。
JSHintオプション一覧を纏めてみたお話。
JSHintオプション一覧
JSHint Options Reference を纏めてみた。(JSHint 2.5 現在)
ドキュメント化されてない隠しオプションも一部含みます。
制限系オプション
trueにするとチェックが厳しくなる
オプション名 | default | |
---|---|---|
bitwise | true | ビット演算子の禁止 |
camelcase | false | camelCase, UPPERASEの強制 |
curly | true | if, forのブロックスコープを必ず{}で括るよう強制 |
eqeqeq | true | 比較演算子は==, != ではなく===, !==を強制 |
forin | true | for...inループ内でhasOwnPropertyでのチェックを強制 |
immed | false | 括弧で括られていない無名関数の即時実行禁止 e.g. (function () { } ()); |
indent | 4 | インデント |
latedef | false | var前の変数使用禁止 "nofunc"で関数は除外 |
maxcomplexity | false | 循環的複雑度 - Wikipedia の制限 |
maxdepth | false | 最大ネスト数の制限 |
maxerr | 50 | 最大エラー数の制限 |
maxlen | false | 一行の長さ制限 |
maxparams | false | 関数の最大引数の制限 |
maxstatements | false | 関数ごとの最大行数の制限 |
newcap | false | コンストラクタ名は大文字に強制 e.g. new F() |
noarg | true | arguments.caller and arguments.callee の使用禁止 |
noempty | true | 空ブロックの禁止 |
nonbsp | true | の禁止 |
nonew | false | new の禁止 |
plusplus | false | ++ , -- の禁止 |
quotmark | false | クォートの規定 true: どちらかに規定, false: 規定しない, "single", "double" |
strict | true | use strict;の強制 |
trailing | true | 行末のホワイトスペース禁止 |
undef | true | 未定義変数の禁止 |
unused | true | 未使用変数を警告 |
許可系オプション
true にするとチェックが甘くなる
オプション名 | default | |
---|---|---|
asi | false | セミコロン抜けチェックの無効化 |
boss | false | == を書くべき所に = が書いてないかチェック無効化 |
debug | false | debugger の許可 |
eqnull | false | == null の許可 |
es5 | false | ECMAscript 5 メソッド許可 |
esnext | false | ECMAScript 6 メソッド許可 |
evil | false | eval と new Function() の許可 |
expr | false | ExpressionStatement (式文) の許可 |
funcscope | false | 関数スコープチェックの無効化 |
globalstrict | false | グローバルな"use strict"許可 |
iterator | false | iterator プロパティの許可 |
lastsemic | false | ワンライナーで書いた時の最後のセミコロン抜けチェックの無効化 |
laxbreak | false | 安全でない改行の許可 |
laxcomma | false | , を先に書くスタイルの許可 |
loopfunc | false | 関数の無限ループチェックの無効化 |
moz | false | FirefoxのJS1.7で追加されたメソッド許可 (有効時はesnextより優先される) |
multistr | false | 改行を\でエスケープしていない複数行テキストのチェック無効化 |
proto | false | proto の許可 |
scripturl | false | javascript:... はじまりのURLの許可 |
shadow | false | 定義済み変数の再定義を許可 |
smarttabs | false | タブとスペースの混在許可 |
sub | false | 連想配列の厳密な呼び出し方チェックの無効化 e.g. person['name']とperson.name |
supernew | false | new function () { ... }; と new Object; の許可 |
validthis | false | コンストラクタ関数以外の関数内でthis利用許可(strict modeの時のみ) |
ライブラリ/フレームワークオプション
使用するライブラリ類をtrueにすると、そのライブラリで使用しているグローバル変数警告が出なくなる
オプション名 | default | |
---|---|---|
browser | false | ブラウザ (window, document, etc) |
couch | false | CouchDB |
devel | false | 開発, デバッグ用変数 (alert, confirm, etc) |
dojo | false | Dojo Toolkit |
jquery | false | jQuery |
mootools | false | MooTools |
node | false | Node.js |
nonstandard | false | 非推奨のグローバル変数(escape, unescape, etc) |
phantom | false | PhantomJS |
prototypejs | false | Prototype.js |
rhino | false | Rhino |
worker | false | Web Workers |
wsh | false | Windows Scripting Host |
yui | false | Yahoo User Interface |
レガシー
将来的に削除予定のオプション
オプション名 | default | |
---|---|---|
nomen | false | 末尾が`の変数名を禁止 |
onevar | false | 変数宣言を関数の最初に書くことの強制 |
passfail | false | 警告があった時点でJSHintを止める |
white | false | Douglas Crockford氏のJavaScriptコーディングスタイルになってるかチェック |
グローバル変数の追加オプション
オプション名 | default | |
---|---|---|
globals | {} | {}内にグローバル変数を定義できる. e.g. "globals": {"AjaxZip3":false} |
設定例
.jshintrc として上記設定をjson形式で保存し、好きな所に配置する。 .jshintrc の利用される順序は、
- カレントディレクトリにある.jshintrc
- 親ディレクトリにある.jshintrc、なければ親の親ディレクトリにある.jshintrc、なければ親の親の親の(以下略)
- $HOME/.jshintrc
となっている。
{ "maxerr" : 50, // Enforcing "bitwise" : true, "camelcase" : false, "curly" : true, "eqeqeq" : true, // Custom Globals "globals" : {"CKEDITOR": false, "jQuery": false} }
公式のサンプルはこちらにあるよ jshint/.jshintrc at master · jshint/jshint · GitHub
Vim でオレオレ PHPCS とオレオレ PHPMD でチェックをするお話。
Syntastic を入れる
Vim の Syntastic で PSR-2 コーディング規約でチェックするお話。 - ゆず日記 を参考。
オレオレPHPCS
PSR-2 ベースに今回はルールを作るものとする
% pear install PHP_CodeSniffer # PHP_CodeSniffer インストール % pear config-show # インストールパス確認 % cd ~/.phpbrew/php/php-5.4.29/lib/php/PHP/CodeSniffer/Standards # PSR2 のルールセットをコピーする % cp -r PSR2 OREORE % vi OREORE/ruleset.xml
今回は試しにPSR-2ディレクトリをまるごとコピーして、インデントが2スペースでも警告が出ないようインデントルールを無視するセットを作ってみる。
# 2行目のrulesetをOREOREに <?xml version="1.0"?> <ruleset name="OREORE"> <description>The OREORE coding standard.</description> # 59-64行目をコメントアウト <!-- Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting. --> <!-- <rule ref="Generic.WhiteSpace.ScopeIndent"> --> <!-- <properties> --> <!-- <property name="ignoreIndentationTokens" type="array" value="T_COMMENT,T_DOC_COMMENT"/> --> <!-- </properties> --> <!-- </rule> --> <!-- <rule ref="Generic.WhiteSpace.DisallowTabIndent"/> --> % phpcs --standard=oreore ./hoge.php # インデント警告が無くなる。
.vimrc にはこんな感じで実行時のオプション指定できる。
" ルール名に依る指定 let g:syntastic_php_phpcs_args='--standard=oreore'
今見たら、--standardにはパス指定も可能だったので
" パスに依る指定 let g:syntastic_php_phpcs_args='--standard=$HOME/.conf/phpcs/ruleset.xml'
とかにして置くと dotfiles リポジトリや開発環境のリポジトリのルールセットを参照して警告がセットできる。
もっと詳しくは Manual :: A sample ruleset.xml file that describes all features of the format を見よう。
オレオレPHPMD
PHPMD - PHP Mess Detector の通りにインストール
Syntastic のデフォルト設定はこんな感じ syntastic/phpmd.vim at master · scrooloose/syntastic · GitHub
'post_args': 'codesize,design,unusedcode,naming'
phpmd にはもう1つ controversial-rules と呼ばれるルールがあるようだが、その名の通り賛否両論なようなので有効にされてないというところか。
なお、変数名が3文字以下の場合、 $db
とかでも警告が出てウザいので、試しに naming
ルールを消してみる。
let g:syntastic_php_phpmd_post_args='codesize,design,unusedcode'
これでVimを起動すると、naming
ルールの警告がでなくなる。
ただし、これは naming-rules に載っている他の naming ルールも出なくなる。例えば、getX() などのメソッドなのに boolean を返すメソッドは命名箇所に isX() とかにしろよという警告がでなくなるため、厳密にやるのであれば creating-a-ruleset を参考に独自 ruleset を指定するべきである。
"べきである"とか言っちゃったのでやってみた。
let g:syntastic_php_phpmd_post_args='$HOME/.conf/phpmd/ruleset.xml'
とかにして、ruleset.xmlに以下のように書いてみる。
<?xml version="1.0"?> <ruleset name="OREORE PHPMD rule set" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:noNamespaceSchemaLocation=" http://pmd.sf.net/ruleset_xml_schema.xsd"> <description> OREORE PHPMD rule set </description> <rule ref="rulesets/codesize.xml" /> <rule ref="rulesets/design.xml" /> <rule ref="rulesets/unusedcode.xml" /> <rule ref="rulesets/naming.xml"> <exclude name="ShortVariable" /> <exclude name="LongVariable" /> </rule> </ruleset>
<exclude name="ShortVariable" />
でルールセット内の特定ルールのみ無効にしている。
もし無効にするのでなく、閾値を変更するには以下のようにするといい感じ。
<rule ref="rulesets/codesize.xml/CyclomaticComplexity"> <priority>1</priority> <properties> <property name="reportLevel" value="5" /> </properties> </rule>