花びらを数える日々

チラシの裏、ときどき星の屑

恋より皺より、きっとずっと深いもの/お題「私のおじいちゃん、おばあちゃん」

今週のお題「私のおじいちゃん、おばあちゃん」

そうか、敬老の日か。
今日は別のことを書こうと思ったのだけど、はてなのお題を見て、自分の祖父母の話を書きたいと思った。

父方の祖父母の記憶はない。幼い頃に会ったことがあるようにも思うが、それすら定かではないほど記憶は遠く、薄い。
だから、これから書くのは母方の祖父母の話だ。

祖父は、僕の憧れの人だった。
強くて、寡黙で、よく遊んでくれた。病気で止めるまではタバコを吸っていて、幼い日の僕は、田舎でかぐその匂いが好きだった。
脳梗塞か何かの影響で、ろれつがうまく回らないみたいだったけれど、僕はそんなこと全く気にしなかった。
何度やっても腕相撲では敵わなくて、子どもって単純だから、そんなことで尊敬していたりした。今思えば、もっと尊敬できるところがたくさんあった。当然のことだけど。

祖母は、優しかった、と思う。僕はおじいちゃん子で、祖母のことも好きだったが、いつも祖父とばかり一緒にいたような気がする。
だから、祖母のことははっきり覚えているが、一緒に何かをした記憶はほとんどない。
昔は怖い人だったのだと、母から聞かされていた。僕はいつも笑顔の祖母しか知らなかったけれど、確かに、そんな面影はあった。

祖父が他界したのは、僕が中学生の頃だ。近しい人が亡くなるのは、それが初めてだった。
入院していた病院から連絡があって、夜遅くに家族で出かけたのを覚えている。

病院に着いて、息を引き取った祖父を前にして、僕は、自分の心が思ったよりも穏やかなことに気がついて、なんとも言えない気持ちだった。
悲しみは、もっと抑えようもなく溢れるものだと思っていたから。

実際は、その後数週間食欲もなく、自覚できていないショックが大きかったようなのだけれど。

それでも、そのとき、僕は泣いた。祖父の死が悲しかったからじゃない。
祖母の言葉が、悲しかったからだ。

祖母は、涙を流して、こういった。
「あなた、寝たふりをしてるんじゃないわよ。」

その姿が、声が、あまりにも切なくて、悲しくて。
人を想うってこういうことなんだろうなと、僕は感じた。
それは、恋よりもずっと深い何かだった。

大人でも、おじいさんでもおばあさんでも、別れが泣くほど辛かったりする。
きっと辛いだけじゃないのだけれど、他に表現できる言葉が見つからない。
そのときは暗くて切ない感情で胸がいっぱいになったけれど、落ち着いてからは、それが同時に、ひどく美しいものだと思えるようになった。

さて。今頃は天国にいるであろう二人は、今でも僕の憧れの人たちだ。

そして、立派になった孫の姿を見たら、どう思うだろうか。

と思ったけど、まだまだ立派とは程遠いから、もう少し頑張らなきゃ。
見守ってくれてなくていいから、いつか気まぐれで、(僕が活躍しているときに)覗いてくれてたら嬉しい。

数学を学ぼうと思う。

数学をあらためて学ぼうと思う。

このエントリーは、完全に自分のためのものだ。誰かに向けたものじゃない。

学ぼうと思った動機はある。けれど、まだ頭の中でごちゃごちゃとしている。だから言葉にすることで、少しずつそれを紐解いていきたいのだ。

過去から始めよう。
僕の通っていた高校では、2年次から文系と理系が分かれていた。もしかしたら全国のすべての高校でそうなのかもしれないけれど、そのあたりは詳しくないし、あまり知ろうという気にもならないから気にしないことにする。

当時の僕は小説をよく読む青年で、科目で言えば現代文が好きだった。数学は得意ではなかった。というよりも、暗記の必要な科目が面倒で嫌いだったのだ。

それに、数学に対しては、その年頃にありがちな「それを学んで何の役に立つのか」という疑問が大きくて、さらに理系の専門職に就きたいという考えも一切なかったため、迷うことなく文系に進んだ。今思えば、あれは人生の分岐点の一つだったかもしれない。

現在に戻る。
10年弱の月日を経て、今、数学をまた一から学んでみたいと思った。

きっかけは、「機械学習の理解には最低限高校・大学レベルの数学の知識が必要である」という話を目にしたことだ。
正直、現時点で僕は機械学習のなんたるかもさっぱりわかっていないし、それに自分が今後どう関わるかもわからないし関わる予定も一切ない。ただ、よく耳にするワードで、なんとなく、興味をそそられた。

僕は頭が良くない。「世の中には、自分の理解できない物事が多くある」ということを多分理解している。でも、理解できていない物事の中に素晴らしい何かがあることも知ってしまっている。だから、興味を持った物事には、たとえ浅くてもいいから理解を深めたいと思う。
実際にできるかどうかは別として、そうありたい、と思ってしまうのだ。

今回は、きっかけはあくまでもきっかけにすぎない。考えてみれば、プログラミングを初めて学んだときのように、数学を学ぶことで開ける視界があるかもしれない、と思った。これだけでも、学ぶ理由は十分だ。

早速図書館で本を借りた。いつもの行動パターンだ。図書館には、誰かが望んだ本と、古典・定番の本がある。つまりそこにある本は初学者が手に取るのに最適なはずだ、というのが僕の持論。選択肢が適度に限られていることも、優柔不断な自分にあっている。

面白そうな、簡単そうなものをいくつか選び、借りて、帰る途中に川沿いの公園で読む。すると、学びとは関係ないけど、なんだかすごく有意義な休日を過ごしている気がしてくる。

1冊目を半分ほど読んだところで、思った以上に数学が素晴らしいものかもしれない、という予感が生まれた。

そして、思考を落ち着かせるためにブログを書こうと思い立ち、今に至る。
続きはまた今度。

学びを得られない学びはないものとする。

学ぶべきことが多すぎて、悩ましい。

何かを学ぼうというときに、最善の方法がすでに明らかになっていることは、少ない。大抵は、それぞれの道の先にいる人たちが、独自の経験をもとに「こうするといいかもしれない」程度のことを語っているにすぎない。その情報は正しいこともあれば、おそらく間違っていることもある。でも、初学者にはその正誤を判断することはできない。結局は、不確かなままで学び始めるしかないのだ。それは決して悪いこととも限らない、とは思う。

何が言いたいかというと、怖いのだ。砂漠のオアシスを目指すようなもので、できるなら歩くことさえ避けたい。でも、この場所に留まるわけにはいかないから、オアシスのありそうな方向に向かって歩く。すれ違う人に、この先にあるよと言われても、自分がたどり着くまで恐怖は拭えない。そんな中を歩き続けなくてはならない。

歩くことを楽しめるようになるしかないか。楽しめないときは多分、いろいろといらないことまで考えすぎなんだ。

何かを学ぶとき、次のような仮説を立てておけば、少しは気が楽になるかもしれない。

「ただし、学びを得られない学びはないものとする。」

何事も何かしらの意味は持つ。とりあえず、やってみよう。

何度目かの挑戦、あるいは逃避行

季節の変わり目は、どうも心が沈む。特に夏の終わりは。同じような人はきっと多いと思う。

でも、最近は夏の終わりというにはあまりにも秋らしい日々で、だからもう大丈夫だ。と、自分に言い聞かせる。

今日は仕事について考えていて、書類の整理を少しして、自分があまりにも過去のことを忘れすぎていることに、あらためて気がついた。 記憶は砂山のようなもので、徐々に薄れて行くことはわかっていたつもりで、だけど、その速度は思ったよりもずっと早かった。怖くなった。

記憶のことだけじゃない。経験したことや学んだことも、あるいは事業も同じだ。積み重ねたつもりのものは、いつの間にか崩れてしまっている。

自分の記憶がなくなるスピードより速く、もっと多くのものを重ねていかなくてはならない。この危機感も、いつかも覚えたものだったかもしれない。

今日からまた、歩みを重ねていこう。たとえ動機が恐怖から逃げるためであっても、前に進めるのなら問題ない。ここにとどまっていたらだめだ。

週末前夜のネガティヴ

モチベーションが上がらない理由はわかっている。 今の自分が、理想とかけ離れているせいだ。今週はどれだけのことを為しただろう? 数えるのに困るくらいで、そんな自分が嫌になる。

今の時代、たとえ手が届きそうなほどの満天の星空を目にしても、その夜空に手を伸ばす人はほとんどいないだろう。星々は遥か彼方にあって、どんなに手を伸ばしても届かないことを誰だって知っているから。

小学生の頃の僕の夢は確か書店員だった。本当は夢もなりたいものもなかったが、何かしら答えなくてはいけないときはあって、そのときは書店員と答えた。我ながらつまらない子供だったと思う。 小学生の多くは、野球選手やサッカー選手など、もっと子供らしい夢を掲げたりする。きっとその中には、本当にそれを夢見ている子もいたことだろう。でも、その夢はいつしか失われる。きっと、そこに至る道が見えなくなるからだ。

目の前に見えていた道は現実に隠れ、閉塞感を払うだけの希望がもう見えない。大人になるにつれ、目が悪くなったからなのか、あるいは目が良くなったからなのか。

だからと言って、自分の限界を知った風な大人は嫌いだ。夢を見ない大人なんて、たとえ立派でも、かっこよくない。
一歩ずつでも進むしかない。お気に入りの音楽を聴いて、小さな夢を掲げて、もうちょっと頑張ろう。

静かな雨の夜

さて、やはり行動を習慣として身につけるには、二週間では足りないことがわかった。

このブログを毎日書くと決めた半月前の気持ちは既に失せ、自分の不甲斐なさを再確認した今日だ。

三日坊主は三日おきに新しく始めればいい、と何かで読んだ。僕はそれを目指そうと思う。今日もなんとか、夜中ではあるもののブログを更新できそうだし。

なんとなくで生きてなんとなくで仕事をする日々を、抜け出さなくてはいけないとなんとなく思っている。今日はこの時期にしては珍しく涼しい雨が降った。こんな雨の日こそ、出かけるべきなのかもしれない。

夜になってから、動画サイトで弾き語りを聴いた。聴きながら仕事をする。そうするとなぜかいつも、僕は僕の思うような人間でいられる。嫌なことや面倒なことから逃げたりせず、誠実に物事に向き合うことのできる人間。それが普通なのかもしれないけれど、それは立派なことだと思うんだ。

涼しい夜風が部屋に吹き込んでくる。大通りを走る車の音と雨音が混ざって聞こえる。こんな日は、できることなら誰かや何かに思いを馳せて眠りたい。次にこんな夜を迎えるまでの宿題にしよう。

初めてのGulp、Sass、EJSの環境構築 インストールからタスク設定まで!

昨日はブログを書かずに寝てしまったので、今日はその埋め合わせをしようと思う。 ウェブ制作の環境構築をしていたため、行ったことを記録しておく。動作環境はMacOS。WindowsOSの場合はまた違うのかも。

やること(やったこと)

前々から気になっていたSassにいい加減手をつけてみようと思った。ついでに同じく気になっていたタスクランナーにも手をつけてみようと思った。調べてみると、Gulpというものがいいらしい。タスクランナーではなくビルドツールと呼ぶのが正しいのかもしれないが、この辺りはまだよくわかっていない。

GulpとSassの実行可能な環境を作る。これが今回の目標。(追記:EJSもついでに使えるようになった。)

1.予習をする

まずは全体像をつかみ、そこから具体的な手段を学ぶ。

Schooという動画学習サービスがあるのだけれど、今回はこれで予習して、わからない部分をネットで調べた。Schooにはかれこれ3年ほど前(だったと思う)から有料会員として登録しており、これはいろいろな言語や制作技術の入門にはもってこいの内容が揃っている。動画という媒体は、深い知識を身につけるには時間がかかりすぎるし、復習にもあまり適していないと個人的には思うが、一方で、どこから手をつけたらいいかわからないような内容を学ぶには非常に良い。書籍等の他媒体よりも広い範囲の入門者を対象として設定しているようで(あるいはユーザーの特定が甘いという意見もあるかもしれないが)、そのおかげで非常にわかりやすい。おすすめ。

1-1.Sassの実行方法について

SassとはCSSメタ言語であり、SassとScssという二つの記法があるらしい。Scss記法は従来のCSSとほぼ変わらない記述方法をとれ、現在メジャーとのことだったので、こちらを学ぶことにした。学ぶと言っても、数分で理解できる簡単なものだった。これは使わなくては損だ。

SassをCSSに変換することをコンパイルというそうだ。様々な言語でこのコンパイルという行為があることは知っていたが、自分で行うのは初めてのことだ。使い慣れない専門用語が出現するとひどく面倒なことに思えるが、Sassのコンパイルは簡単だった。

実行方法にはいろいろあるらしい。専用のアプリケーションを使う方法もあるみたいだけれど、Gulpを使用すればプラグインを導入するだけで実行できるみたいなので、Gulpを使ってみることにした。

1-2.Gulpについて

Gulpは、様々な作業を自動化するためのツールだ。と、僕は認識している。前述したSassのコンパイルの他にも、画像の圧縮やファイルの複製なんかも簡単にできるらしい。最初は難しい印象を持っていたけれど、使ってみると思ったより簡単だった。作った人たちすごい。

2.前提となる準備

ここまでで、まず第一の目標はGulpの実行環境を整えることになった。そのためには、Node.jsのインストールが必要らしい。

2-1.Node.jsのグローバルインストー

幸い僕はNode.jsは以前使用することがあったため、すでにインストールが済んでいる。Node.jsはバージョン管理ツールを用いてインストールするのがいいみたいだけれど、直接インストールツールをダウンロードして実行してもいいみたい。僕はどうやってインストールしたか忘れてしまった。必要があればその時に再インストールしようと思う。

2-2.Gulpのグローバルインストー

次に、Gulpをグローバルインストールする。グローバルという言葉も変数やら何やらで使用するためもう聞きなれたが、多分1年前の僕は意味がわからなかっただろうな…。
簡単に言えば、どこからでも使えるように、といった意味合いだ。たぶん。

グローバルインストールには、次のコマンドを使用する。

npm install --global gulp-cli

2-3.プロジェクトフォルダの作成

サイトごとにデータを格納するプロジェクトフォルダを作成する。作業用フォルダ、というべきか。ここに、ローカルのGulpやプラグインをインストールする。

3.Gulpのインストー

ここから実際にインストールをしてみる。コマンドを入れていくだけなので、一度知ってしまえば難しくはない。

3-1.Gulp本体のインストー

まずは、作業用フォルダに移動する。

cd {作業用フォルダのパス}

次に、インストールするパッケージを管理するファイルpackage.jsonを作成する。

npm init

いろいろと聞かれるので答える。とりあえず使ってみるだけなら、全部Enterで飛ばしてしまってもいいらしいので僕はそうした。また必要な時に学ぼう。

そして、Gulp本体をインストールする。

npm install --save-dev gulp

これでOK。

3-2.Gulpで使用するプラグインのインストー

複数のサイトやブログを参考にした結果、今回Gulpで以下のタスクを行うことに決めた。

EJSとは、テンプレートエンジンと呼ばれるものらしく、HTMLの作成で役に立ちそうなので導入することにした。具体的には、インクルードや変数の使用ができるようになる。SassのHTML版のようなもの、というとわかりやすい(異なる部分はとても多いが)。最近はWordPress等でPHPを使うことの方が多いのだけれど、そのせいで余計にHTMLを書くのが億劫になっていたので丁度いい。

使用するプラグインとコマンドは以下。

画像圧縮プラグイン

npm install --save-dev gulp-imagemin

Sassプラグイン

npm install gulp-sass --save-dev

Sassコンパイル時にベンダープレフィックスを追加するプラグイン

npm install --save-dev gulp-autoprefixer

JSを圧縮するプラグイン

npm install gulp-uglify --save-dev

EJSプラグイン

npm install gulp-ejs --save-dev

インストールされているプラグインを確認するには、先ほど作成したpackage.jsonを見るか、以下のコマンドを使用する。

npm ls --depth=0

4.ディレクトリの整理

Gulpを使用する準備は整ったのだけれど、ここで先に使用するフォルダの構造を整えておく。僕は、次のような形にした。

  • project
    • develop //開発用フォルダ
      • images
      • sass
      • js
      • ejs
    • release //出力先フォルダ
      • images
      • css
      • js
    • (node_modules)

5.gulpfile.jsの作成

最後に、Gulpで実行するタスクを指定するファイル「gulpfile.js」を作業ディレクトリ直下に作成して、必要な記述をする。
記述内容は以下のようになったが、ここについては他のブログ等での説明が詳しい。EJSに関しては、フォルダ構造もコピーして出力するよう指定した。

//gulp本体の読み込み
var gulp = require('gulp');

//Sassコンパイル&ベンダープレフィックス追加
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');

var sassPath = {
  src: 'develop/sass/**/*.scss',
  dest: 'release/css',
  watch: 'develop/sass/**'
};
var options = {
  outputStyle: 'compressed',
  sourceMap: true,
  sourceComments: false
};
var autoprefixerOptions = {
  browsers: ['last 3 version', 'ie >= 6', 'Android 4.0']
};

gulp.task('sass', function() {
  gulp.src(sassPath.src)
    .pipe(sass(options).on('error', sass.logError))
    .pipe(autoprefixer(autoprefixerOptions))
    .pipe(gulp.dest(sassPath.dest));
});

//画像圧縮
var imagemin = require('gulp-imagemin');

var imageminPath = {
  watch: 'develop/images/**'
};

gulp.task('minify-img', function() {
  gulp.src('develop/images/*.png')
    .pipe(imagemin())
    .pipe(gulp.dest('release/images'));
  gulp.src('develop/images/*.jpg')
    .pipe(imagemin())
    .pipe(gulp.dest('release/images'));
  gulp.src('develop/images/*.gif')
    .pipe(imagemin())
    .pipe(gulp.dest('release/images'));
});

//JS圧縮
var uglify = require('gulp-uglify');

var uglifyPath = {
  src: 'develop/js/*.js',
  dest: 'release/js',
  watch: 'develop/js/**'
};

gulp.task('minify-js', function() {
  gulp.src(uglifyPath.src)
    .pipe(uglify())
    .pipe(gulp.dest(uglifyPath.dest));
});

// EJS
var ejs = require('gulp-ejs');

var ejsPath = {
  src: ['develop/ejs/**/*.ejs','!' + 'develop/ejs/**/_*.ejs'],
  dest: 'release/',
  watch: 'develop/ejs/**'
};

gulp.task('ejs', function() {
  gulp.src(ejsPath.src, {base:'develop/ejs/'})
    .pipe(ejs({}, {}, {'ext': '.html'}))
    .pipe(gulp.dest(ejsPath.dest))
});

//監視タスクの設定
gulp.task('default', function(){
  gulp.watch([sassPath.watch], ['sass']);
  gulp.watch([imageminPath.watch], ['minify-img']);
  gulp.watch([uglifyPath.watch], ['minify-js']);
  gulp.watch([ejsPath.watch], ['ejs']);
});

6.動作確認

上記のgulpfile.jsでは、defaultに監視タスクを設定した。これは、gulpコマンドで実行できる。タスクを個別で実行する際には、gulp {タスク名}のコマンドでOK。

6-1. Atomでの実行

僕はエディタにAtomを使っているので、いちいちターミナルを使わずにGulpを実行できるよう「gulp-control」というプラグインを入れた。開いているプロジェクトに応じて設定されているタスクをクリックで起動・停止できる。Atomユーザーならほとんどが使っているであろう「Project Manager」プラグインとセットで使うと非常に便利。ちなみに僕はtool-barとflex-tool-barプラグインを使って常時表示されるボタンに設定した。プラグインの制作者様には、心から感謝している。ありがとうございます!

7.課題

ここまでで、目的としていた動作は実現できるようになった。一つ課題として残っているのは、ファイルの変更があった際にすべてのファイルに対して圧縮処理等が行われてしまうことだ。できることなら変更のあったファイルにだけ処理を実行したいところだけれど、今は小規模なサイトしか作らないし、特に困るわけでもないので放置することにした。時間があるときに改善しよう。