aikoのある生活【アルバム編】
aikoという歌手をご存知だろうか.
aiko.com
そう、あの有名な「カブトムシ」や「ボーイフレンド」を歌っているあのaikoである。
今年の7月でデビュー19周年となるaiko。デビュー当時から変わらない歌や振る舞い、その可愛らしい見た目から今もなお人気のある歌手である(とおもう)
この記事を書こうと思ったのは、ファンクラブ「Baby Peenats」の継続用紙が届いていたからだ。今回の更新でちょうど2年、7月から3年目の会員となる。いい機会なので、今までに聞いてきたなかで良いと思った曲をアルバムごとに書き出してみたいと思う。
小さな丸い好日
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 1999/04/21
- メディア: CD
- 購入: 3人 クリック: 34回
- この商品を含むブログ (109件) を見る
発売は1999年4月21日。aikoのメジャーデビュー後初のアルバムとなる。
オレンジな満月
書き始めに言うのもどうかと思うのだが、aikoは「どれか一曲」を勧めるのが難しい。自分がファンというバイアスがかかっているからだとは思うが、どの曲も良いと言ってしまいそうになる。その気持ちを抑えて、「小さな丸い好日」からは「オレンジな満月」を選んだ。明るめのポップで、これから始まる「小さな丸い好日」に勢いを付けるような曲であるが、途中体調を崩していたり(消毒液が〜)、お互いうまくやり取りできていないのか投げたボールが返ってこなかったりといった歌詞である。
aiko bonという本では、「大きな月というのが苦手だが、それにもすがるような気持ち」というのを歌ったとも書いてある。
余談
小さな丸い好日というパン屋さんが有ります。
長崎まちねた。●パンとコーヒーのお店「小さな丸い好日」オープン!
桜の木の下
- アーティスト: aiko,島田昌典
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2000/03/01
- メディア: CD
- 購入: 4人 クリック: 121回
- この商品を含むブログ (227件) を見る
発売は2000年3月1日。aikoのアルバムの中では1,2を争う知名度のアルバムではないだろうか。 桜の木の下には、夏の星座にぶら下がる「花火」や甘い匂いに誘われる「カブトムシ」など有名曲が多い。
桜の時
この中から1つ選べってのが無理があるように思う。迷った挙句、桜の時とした。カルピスウォーターのCMソングとして起用されている。
桜の時という曲はタイトルから分かるように(そもそもアルバムタイトルが桜の木の下なのだが)桜を見る二人の曲。毎年桜の時期になると狂ったように聞いている。
歌詞を聞くだけで幸せな世界が広がる気がする。「好き」が全面に押し出されているものではなくて、その気持を内面に秘めていてこの先もまた同じように一緒に桜を見たいというように感じられた。
余談
シングル版の桜の時は、CDジャケットが和紙でできている。富山県の和紙職人の方に依頼したらしい。
夏服
- アーティスト: aiko,島田昌典
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2001/06/20
- メディア: CD
- クリック: 40回
- この商品を含むブログ (157件) を見る
発売は2001年6月20日。テトラポット登ることで有名な「ボーイフレンド」が収録されているアルバムだ。テトラポット登るの危ないと思うんだけどね。
アスパラ
aikoはついに野菜までタイトルにするようになってしまった。アスパラという曲は学生時代をイメージした曲である。aikoの学生時代の弁当にはアスパラが本当によく入っていたらしく、それが理由でアスパラになったらしい。
まず歌い出しが好きだ。
あの子の前を上手に通る癖覚えたのは
もうずいぶん前の事長いなぁ
あなたの視線追うと必ずいるあの子の前を
通り過ぎてる事であたしに気付いて欲しくて
こういう歌詞を好きになる傾向が自分には絶対あると思う。アスパラを聞くと決まってかつての学生時代(中高ぐらいか)を思い出す。廊下を歩くだけでもドキドキする瞬間ってのがあるんだね。
余談
夏服は最後の「初恋」のあとに「夏服」って曲が入ってます。まだaiko聞き初めの頃突然なり始めてかなり驚いた。桜の時でいう恋愛ジャンキーも同じである。にしてもこの夏服という曲は良い。寝る前とかにイヤホンで聞きたいタイプの曲。自分にとってはただの衣替えだというのに、aikoにかかると1曲できてしまうからaikoすごい。
秋 そばにいるよ
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2002/09/04
- メディア: CD
- 購入: 1人 クリック: 31回
- この商品を含むブログ (46件) を見る
発売は2002年9月4日。ライブで歌われる相合傘のアレンジバージョン「相合傘(汗かきMix)」も収録。
今度までには
自分が初めて行った(aikoだけでなくライブというもの自体初だったのだが)LLP18のときにaikoが「久しぶりに歌う」と言って歌いだした曲。初めてのライブってあまりの衝撃に記憶があやふやなのだが、その中でも覚えていた好きな曲に入っているのがこの「今度までには」である。サビの
あれも素晴らしくってこれも素敵だった
悲しいけれど切ないけれど
あれもこれも忘れるのかなぁ
そして最後にあなたの温もりも忘れるのかなぁ
というところを聞きながら、「切ないなぁ」とひたすら繰り返すだけのaikoジャンキーになる曲である。 それにしても秋そばにいるよ全体を通して暗めなきがするのは気のせいだろうか。
余談
今度までには(single)に収録されている「あなたの唄」って曲も良い。先日のLLR8で初めて生で聞けた。aikoはシングルのカップリングにとんでもないの収録されているので、アルバムだけでなくシングルも聞いたほうが良い。
暁のラブレター
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2003/11/27
- メディア: CD
- 購入: 3人 クリック: 71回
- この商品を含むブログ (163件) を見る
発売は2003年11月27日。人によってはグリコのカフェオレCMソング「アンドロメダ」を知っているだろうか。
彼の落書き
1曲目の熱からつながっている曲。よかったら熱から聞いてみて欲しい。 歌い出しの
今日もやっぱ連絡はない
きっと忙しいんだと思ってみたり
到底クリアできないゲームを
願掛けするつもりでチャレンジしたり
容易に想像ができる。先の歌詞を読むとこの二人は付き合っていないんだろう。
落ちぬ 取れぬ 消えぬ あなたへの思いはまさに
体中の落書きみたい
女の子側の気持ちは、まるで落書きのようについて離れないのだろう。これから「恋」ってなんですかって聞かれたら、星野源ではなくaikoの「彼の落書き」を聞けばわかると諭してあげたいと思う。
余談
暁のラブレターには「蝶々結び」という曲が収録されている。ワウギターがとても心地良い。あと、MVみて「おさげだ…」ってなる。
交差点で君が立っていても もう今は見つけられないことで有名な「アンドロメダ」も収録されている。
1曲ずつ紹介すると言いながら余談で3曲も紹介するのは本当にどうかしていると思うが許して欲しい。
5年後あなたを見つけたら背筋を伸ばして声をかけられるような人になりたい。どう考えてもなれていないので、今後の人生ではそうなれるような努力をしよう。
夢の中のまっすぐな道
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2005/03/02
- メディア: CD
- クリック: 87回
- この商品を含むブログ (445件) を見る
発売は2005年3月2日。12年も前になるのかという気持ち。ジャケットが鹿?トナカイ?みたいである。
明日もいつもどおりに
迷った挙句、「明日もいつもどおりに」を選んだ。aikoは我々が想像もしないところから曲を生み出す天才である。この曲に関しては、こんな歌詞がある。
出の悪い水道 治し方もわからない
今は些細な事すらも軽く拭えない
悪いことがあると、連続して起こることが多いように思う。何か生活の中で辛いこと、aikoの曲で言うと相手とうまく行っていないとかかも知れないが、水道の出が悪いような些細な出来事でさらに落ち込む。まさかそれが出の悪い水道で表現されているとは思いもしないけれども。
かばん
1曲だけとか無理なので、他にもおすすめしたい曲を書いていこうと思う。
「あなたへの気持ちはこんなに大きなかばんにも収まらない」って意味でかばん。サビの歌詞が
大きなかばんにもこの胸にも 収まらないんじゃない?
「収まらないんじゃない?」なんだね。収まらないんだろうね。この大きな気持ちをあなたに知ってもらいたいけど、でも言い出せない。aikoワールド全開である。aikoは往々にして隣りにいる意中の男性には気持ちを伝えられない。でもそういう人は世の中いっぱいいるし、aiko聞くと「あー分かるわ」みたいな気持ちになるんじゃないだろうか。 ところで、かばんに関しては唄ももちろんのことMVが良い。途中でカーテンにaikoの頭が収まっちゃってるのも好き。頼むから落ち着いてくれと言いたくなるぐらいaikoはよく動いている。特にライブで。
三国駅
天使みたいな白いaikoが出てくることで有名な(?)三国駅。aikoが学生時代過ごした三国にある「あそこのボーリング場」を見に行った人も少なくないと思う。aikoの歌うバラードはなぜこんなにも良いのだろうか。
彼女
彼女 | aiko official website発売は2006年8月23日。彼女といえば「がんばっていきまっしょい」のテーマソングとなったキラキラが有名だろうか。他にも「あらしのよるに」というアニメーションの主題歌となった「スター」、docomoのCMにもなった「キスする前に」など盛り沢山である。
シャッター
このアルバムで1つを選べというのが無理があると思う。まず1曲目はシャッター。
先日この記事
amadamu.hatenablog.com に書かれていた以下の文
前髪を切りすぎた全人類のアンセムこと、名曲「シャッター」
aikoの言葉にはリアルが詰まっている 〜LLR vol.08 Zepp Tokyo公演を経て〜 - was neues
なるほど、シャッターはこれからこう説明すればいいのかと勝手に納得していた。「馬鹿野郎前髪を切りすぎているのはどう考えても三戸なつめじゃねーか」という方、ちょっとまって欲しい。 このシャッターという曲では、
切りすぎた前髪右手で押さえて少し背を向けた
嫌われたくないから
うつむくあたしをからかったあなた
今はそれもあたしの夢の中だけ
そういうことである(どういうことだ)切りすぎた前髪を抑える私をからかうあなたはもういないあたり切ない。
最初に聞いたのはベストアルバムの「シャッター」だったため、彼女のシャッターのイントロは驚いた。カラオケで入れたとき何してたら良いかわからなくなる。
キラキラ
これは知っている人も多いだろう。前途の通り、「がんばっていきまっしょい」の主題歌となっている。がんばっていきまっしょいといえば若かれし頃の錦戸亮くんがでているドラマである。
どういう構成とかコードだみたいな話はさっぱりわからないけども、キラキラはとても好きだ。周りに好きって人も多い気がする。シルバーリングが黒くなるってよっぽど待ったんだねaikoは。
ライブのときはサビでみなが手を振る。この景色は壮観である。ちなみにこのライブの映像はLOVE LIKE ALOHAというおーいお茶が配られる無料ライブである(だいぶ端折った説明)
17の月
非常にゆったりとした曲。最初に
心変わりを許した訳じゃない
もうあたしに力が残ってない
傷付いたまま癒す事もない
お願い今日はこのまま寝かせて
とある。もう別れたのだろうか。その後の歌詞は、「帰るぐらいならいっそ迷ってしまえ」とか「逢えば逢う程恋は募る」とか気持ちは大きくなっているけど、
あなたはあたしよりうんと背が高いから
この道もきっと見晴らしがいいのだろう
結局あなたとあたしの見ている世界は違うみたいな歌詞に思えた。歌詞もいいけど曲調が好きだ。
瞳
友人のために作った曲(だった気がする) 結婚式の両親への手紙とかそういうシーンで瞳を流されたら間違いなく手紙を読めなくなると思う。Googleとかで検索してても"結婚式"がサジェストされていた。 彼女というアルバムは何となく「スター」で終わりな感じがするが、そこからまた上がって瞳でしっかりと締める。そんなアルバムだと思う。
秘密
- アーティスト: aiko,島田昌典,根岸孝旨
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2008/04/02
- メディア: CD
- クリック: 210回
- この商品を含むブログ (154件) を見る
発売は2008年4月2日。この秘密というアルバムはフライパンの流星群(You & Me both)から始まるアルバムだ。他にも後ろに立ってる観覧車に乗りたかった二人とか、シアワセが収録されている。シアワセは自身が一番最初に好きなったaikoの曲だと思う。
秘密
少し前で一番最初に好きなったのはシアワセと書いているが、秘密を聞いた結果今では「秘密」が一番好きなのでこの曲をおすすめしたい。aikoジャンキー1の秘密好きなんじゃないかという上田啓太さんの「真顔日記」にすべてが書かれている気がする。
上田啓太さんのaiko記事はどれも面白い。ゴリラと綱引きしていた記事は夜中に大笑いしてしまった。
サビ前の「これ以上思いが〜済まなくなりそうで」から、サビに入る部分で鳥肌が立つ。これもまた寝る前に聞くことが多いのだが、何度聞いても飽きない。何度でも言うが、aikoのバラードは最高だと思う。
シアワセ
aikoの楽曲で一番聞いていると思う。最初に好きになった曲だし、MVも一番好きだと思う。ノースリーブaikoと麦わらaikoが交互に出てくるMV。
余談
大阪ライブ2日目終わってしまったー💦皆さん本当にありがとうございました!!!ずっと歌っていたかったです。みんな凄いな!最高や!!
— aiko official (@aiko_dochibi) 2017年5月14日
歌い足りないのでここで一曲😝(お父さんが内緒で連れてきてくれました) pic.twitter.com/oXn0d09hXw
あんころもち(犬)もaikoも可愛い。このときはZepp Osaka Baysideでライブしてて、すぐ近くに天保山大観覧車があったというわけ。でも実際Zepp Osaka Baysideの後ろに立っているのはUSJなきもする。
BABY
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2010/03/31
- メディア: CD
- 購入: 5人 クリック: 269回
- この商品を含むブログ (82件) を見る
BABY | aiko official website
発売は2010年3月31日。BABYといえば、花より男子Fにの劇中歌KissHugやアルベルトのCMにもなったmilkが収録されている。
あの子の夢
BABYも勿論迷った。なんせ自分が最初に聞いたのが「BABY」「まとめⅠ」「まとめⅡ」を並行して聞いていた感じだからだ。アルバムの1曲目として申し分ないbeat、ライブで裏打ちするのが楽しいmilk(milkの紹介にこれは失礼な気がするが)、戻れない明日など迷った。が、あの子の夢を1番推したい。
「あの子の夢」はウェルかめの主題歌にもなった曲。だがシングルでは発売されておらず、BABYにのみ収録されている。主題歌になってシングルになってないとは珍しい。
あの子の夢は入りのドラムがまず良い。aikoのドラム担当といえば佐野康夫さん。ファンからはさのっちとも呼ばれている。活動内容見ていると、この人はすごい人なのだと思い知らされる。この曲に関しては、歌詞云々というより完全に聞いてて「なんか良い」タイプの曲だった。一番好きなところはCメロです(物音に怯えて〜の部分)
milk
milkはライブでも盛り上がる定番曲。上でも書いたけど手拍子が楽しい。雪もミルクも霞んじゃうぐらいの光りに包まれたい。
aiko「ねえ目を見てねえ口見て雪もミルクももう全部見て…って全部見せるんかーい!」 僕「まず前見ろや!!!」の時の写真です pic.twitter.com/BEryiuZFrf
— おゆろ (@Uro__is) 2017年4月5日
時のシルエット
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2012/06/20
- メディア: CD
- この商品を含むブログ (8件) を見る
発売は2012年6月20日。自分がいちばん好きなaikoのアルバムである。正直時のシルエットは好きな曲が多すぎる。好きだけじゃすまなくなりそう。
Aka
このアルバムの1曲目となる曲。あなたとあたしの結びつきというか。どんなにうまくいかなくても、壁が立ちはだかったとしても、あなたと私の二人でなら乗り越えていける。そんな曲だと思う。
音の混ざった人混みの中
二人離れず手を繋いだ
愛してるよりも強い指で
aikoの言う愛してるはそんな軽いものでは無いんだろうし、それよりも強いってことは相当な結びつきなんだろう。なんせあたしが楽しく生きていくさじ加減はあなたが握っているのだから。 また思い出の話になってしまうのだが、LLP18のときにAkaを生で聞いて自然と涙が流れた。aikoのライブに行くと、今まで以上に曲を好きになる。自分の中でAkaはもう殿堂入りレベルだ。
くちびる
歌い出しが
あなたのいない世界には あたしもいない
歌い出しからaikoワールド全開だ。くちびるは、1番の「胸が粉々になる」がどう考えても「こなこなになる」に聞こえてしまう現象がある。 diary.uedakeita.net 歌詞だけではなくリズムも好きだ。なんだろうねこのゆらゆら揺れたくなるリズムは。
向かいあわせ
ダーリンは外国人の主題歌にもなったこの曲。菜の花畑にいるaikoが可愛い。これもLLP18で好きになったかな。今思い返すとあのライブで更に深くハマったと思う。
冷たい嘘
彼の落書きに続く、「彼からの連絡がないソング」である。「しかし連絡がないなあ」といった歌詞で始まる恋愛ソングって聞いたことが無い。「毎日ため息つくために息を吸う」とか「あなたを愛した事もさぁ いつかは嘘になるんだ」とか、しんどさのレベルが高すぎる。
恋のスーパーボール
恋のスーパーボール/ホームという両A面シングルの1曲。今の子にはA面とか通じないんだろうか。これはカルピスウォーターのCMソングだった。夏になると聞きたくなる1曲だ。
出口は塞いでしまおう
2人で迷いたいの 今夜をあげる
出口を塞ぎたいタイプのaikoが出てきた。そういう表現はとてもいいと思う。
この時のaikoは髪の毛がベリーショートだったのだが、このaikoも個人的にはいいと思う。ロングもいいがショートはもっといい。
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2011/05/11
- メディア: CD
- 購入: 1人 クリック: 24回
- この商品を含むブログ (14件) を見る
自転車
Akaで始まって自転車で終わる。素晴らしいアルバムである。自分はアルバム最後にあるバラードをすごく好きになる(と思う)が、その中でも自転車は他よりも強い思い入れがある。これもまたLLP18の思い出だ。
自転車には次のような歌詞がある。
明日あなたはあたしの事をどう思っていてくれるだろう
aikoは今日恋人でも明日にはどうなるかわからないという気持ちが強く出ている気がする。例えば、
あなたがあたしの事をどう思っているのか
それはそれは毎日不安です(Aka)
とか
明日あなたがいなくなってあさって心変わりして
いつか嫌いになられたら...(愛の病)
のような。aikoと言うのは常に不安なのだ。自分にも似たようなところがあるあたりがハマった要因なのかもしれない。
(時のシルエットについて書きすぎじゃないですかね…)
泡のような愛だった
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2014/05/29
- メディア: CD
- この商品を含むブログ (8件) を見る
泡のような愛だった | aiko official website
発売は2014年5月28日。随分近づいてきた。時のシルエットに続いてaikoが飛んでいるジャケットである。aikoはCDジャケットでもライブでもよく飛び跳ねている。
明日明後日は東京ライブ
— aiko official (@aiko_dochibi) 2017年6月16日
よろしくお願いします。
飛び倒してZEPPの天井掃除してやりましょう🙇♀️✨✨✨ pic.twitter.com/3oKnxBQXSm
これは最近のTwitterより。
明日の歌
このアルバム1曲目に収録されている「明日の歌」が良い。言葉の数がすごい。それ故にちょこちょこ早口で歌うところもある。
暑いって言うかこの部屋には想い出が多すぎる またも歌い出しでびっくりする。思い出が多いといった趣旨の歌詞はあると思うが、「暑いって言うか」から始まるのだ。また、 明日が来ないなんて 思った事が無かった
とまた明日に絶望している。
この電池切れてもずっと点滅したままきっと止まってはくれないし
薄暗い冷たい廊下を歩くと冷たい床が足下から悲しくする
「明日もいつもどおりに」ばりに負の連鎖が続いて更に辛さが増している。つい元気だしてって言いそうになってしまうぐらい。
May Dream
May Dream(初回限定仕様盤A)(Blu-ray Disc付)
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2016/05/18
- メディア: CD
- この商品を含むブログ (1件) を見る
発売は2016年5月18日。執筆時点で1年以上前だ。ついこの間出たばっかりな気がしていたが、もう1年も経っていた。aikoも出演したことで話題になった素敵な選タクシーの主題歌「明日の向こう」や、フカキョンとディーンフジオカ出演のドラマ「ダメな私に恋してください」の主題歌「もっと」など、前作に比べるとタイアップソングが多い印象を受ける。このアルバムの大きな変更点は、
何時何分
何時何分は、前作の1曲目「明日の歌」と同様言葉数の多い曲である。それはこの曲に限った話ではなく、May Dream収録曲は言葉数が多いように思える。この曲の歌詞は
あめちゃんあったら嬉しいな
がさごそ探るカバンの中
掴んでみたらゴミ屑と
偶然見つけたあの指輪
aikoがあめちゃんとか言うと、完全に大阪のおばちゃんで再生されてしまう。そんなあめちゃんと一緒に見つかるのは、無くしたと思っていた指輪。あめちゃんという出だしから急転直下何か思いものがのしかかる。ちなみにタイトルは「何時何分地球が何周回ったとき?」っていうアレから来ているらしい。
ちなみにこの曲はインポートしてから218回聞いているらしい。脅威のハイペース。
冷凍便
これもまた何時何分に続いて言葉数が多い。
早く家に帰ったらなんかどうしていいかわからなくなる
あたしの楽しみにしてるラジオ もっと遅くにやるの
自分の中ではラジオっ子というとaikoの印象が強い。ついには歌の中に出てきた。冷凍便は歌詞よりもリズムというか、音自体が好きな曲。
信号
「愛なんて~」とファルセットで歌い上げる部分のインパクトがすごい。1度聞いただけで耳に残る曲だと思う。愛もわからないし君のこともわからないけど、好きなんだろうね。
愛だけは
最初にMay Dreamを通しで聞いたときには特に印象に残っていなかったのだが、そこは「スルメソング」で有名なaiko。聞いてるうちにハマっていった。聞き込んでいったことだけが要因ではなくて、ファンクラブ限定動画もかなり大きな理由なんだけども。
湿った夏の始まり
- アーティスト: aiko
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2018/06/06
- メディア: CD
- この商品を含むブログを見る
格好いいな
この「格好いいな」という曲と、最後に出てくる「だから」はあの島やんこと島田昌典さん編曲である。前作のMay Dreamでは編曲から降りており1曲もなかったが、今回復活ということになった。アルバムの最初と最後を島田さんアレンジで聞けるのはすごく嬉しい。自分が一番好きな時のシルエットの「Aka」で始まり「自転車」についで、「格好いいな」で始まって「だから」で終わるこのアルバムも好きである。最初聞いたとき「ブス」というワードになんとなくドキッとしたのは私だけだろうか……。あと、ライブで聞くと
あたしの胸にインクを落としていくの
のあとの佐野っちのドラムでハッとする。あそこ大好き。そしてもう1点良いなと思うのが、
8パーセント 残った気持ちが白紙に変わる
のところで, 8%というもう少しでなくなりそうみたいな量が絶妙だなと思っていた。
ストロー
大量に繰り返される「君に良いことがあるように」というフレーズ。これが脳内をずっとぐるぐるし続けている。離れてくれない。知名度も王様のブランチ効果でそれなりにある。どう考えても寝癖をaikoに直されたい。この曲ができた「ストローをおみくじみたいにして引いて赤色がでたときハッピーな気持ちになる」というもの、実にaikoらしいなあと思った。
普段元気になりたいときに聞いている。一つぐらい私にも良いことがあってほしい。
愛は勝手
ライブで横揺れしながら聞きたくある曲。
毎日あたしの体があなたで形成されていきます
とか
毎日何回触ってくれているの?
とか
こんなあたしとずっと一緒にいたいの?
とか。なんというか、aikoはいつも不安なのだきっと。aikoの歌詞に出てくる”あなた”という存在は、我々の考えているそれの何倍も重いと思う。
宇宙で息をして
なんというか、最初に聞いたときにすごく素直な曲というか、すっと受け入れやすい曲であると思った。途中のストリングスも素敵。このアルバムの中でもかなり上位にはいってくる気がする。ポップス!という感じだった。好きには好きなんだけどしっかりは聞いていなくて、ライブに行ったらより良さがわかったタイプの曲。
だから
サンキュー島やん、これを作ってくれてありがとう。そして最後に入れてくれてありがとう。この歌詞を見ていると、
あたしはあなたになれない だからずっと楽しいんだよ
とか
一緒にいれば何が見えてくるの
とか。そういう感じの歌詞がある。これを見たときに、「戻れない明日」の
あたしはあなたじゃないから全てを同じように感じられないからこそ 隣で笑っていたいの 悲しくなったときはたくさん泣いてもいいけど
という歌詞を思い出した。辛いこととか大変なことっていっぱいあって。そういうものってどうにもならない日もあって。「だから」でも言われているけど、一緒にいて肌に触れて、笑ってという次元で分かち合いたいのかなって。愛やら恋やら好きやらは言葉として出てきていないけど、そういうものを感じられる曲になってるなあって。これをライブで聞くと鳥肌がとまらないです。
ちなみに、これ書きながら自分で恥ずかしくなっている。黒歴史になりそう。
aikoの良さは何なのか
自分がaikoをしっかり聞き始めたのが2014年、ファンクラブに入ったのが2015年の7月、初めてのライブが2015年の12月27日。まだaikoの良さを語れるほどの年数ではないようには思う、というのを断っておく。
- ファンとの近さ
aikoももう19年目に突入しようとしている。それだけのキャリアを経て、人気も出てきたアーティストというのはファンとの距離ができてもおかしくないと思う。aikoはLLP(ホールツアー), LLR(ライブハウスツアー), LLA(浜辺)の3つにわけられるのだが、どのライブでもお客さんからの呼びかけに答える(なんなら普通に会話する)し、ハイタッチやら握手やら触れ合える機会も多い。最初に行ったのがaikoで、この人についていきたいと思えた。
- 変わらない良さ
変わらないというのは難しいことだと思う。19年もやれば色々あるだろうし。でも歌う曲のジャンルも、前途のライブのスタイルも変わらない。よく走るしよく跳ねる。見た目もあまり変わらないですね。いや流石に歳相応なところもあるけども、驚異のキープ力だと思う。そしてこれからも変わらないで居てほしい。
aikoの良さを1度に知るにはライブに行ってみるのが良いと思う。ライブDVD/BDを見るところからでも良い。でもDVD/BDだとMCがカットされているら、できれば会場に行ってもらいたい。「aikoしらない」という人から「aikoはCDで聞くぐらい」というライトなファンも、きっと会場の人もaikoも暖かく迎え入れてくれると思う。そして帰るときには、楽しかったと思えると思う。
最後に
1stアルバム「小さな丸い好日」から12thアルバム「May Dream」まで振り返ってみた。普段アルバム単位で聞くことはなく、aiko全曲シャッフルで聞くことが多いためアルバムを意識して考えることは少なかった。aikoは昔から変わらず恋愛ソングを歌い続けている。歌い方とか声は変わっているけども、それはそれでいい味になっている。
この記事を書くのは正直迷った。「それは違うでしょ」とか「こっちの曲のほうが良くない?」みたいな意見を持つ人もいると思う。それはまだファン歴が浅い人間が書いたものなのでどうか大目に見てほしい。
より詳しくaikoのことを知りたいという方は、ぜひaiko bonを読んでみてほしい。中古でしか手に入らないと思うが…
今回はアルバム編だったが、もし可能であればシングルカップリング曲の好きなものを紹介する記事も書きたいと思う。カップリングはよりaikoらしさが詰まっているのかもしれない。
AtCoder Beginner Contest #62
問題はこちらから.
問題A: Grouping
#include <iostream> using namespace std; int main() { int x, y; int groups[] = {0, 1, 2, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1}; cin >> x >> y; cout << (groups[x] == groups[y]?"Yes":"No") << endl; }
問題B: Picture Frame
#include <iostream> using namespace std; int main() { int h, w; cin >> h >> w; for(int j = 0 ; j < w + 2 ; j++) cout << "#"; cout << "\n"; for(int i = 0 ; i < h ; i++){ string s; cin >> s; cout << "#" << s << "#" << endl; } for(int j = 0 ; j < w + 2 ; j++) cout << "#"; cout << "\n"; }
問題C: Chocolate Bar
4種類分け方があるので, それを全部試す.
#include <iostream> using namespace std; #define int long long signed main() { int h, w; long long ans = 1e11; cin >> h >> w; for(int h1 = 1 ; h1 <= h ; h1++){ int area1 = h1 * w; int h2 = (h - h1)/2; int area2 = h2 * w; int area3 = (h-h1-h2) * w; int _min = min(area1, min(area2, area3)); int _max = max(area1, max(area2, area3)); ans = min(ans, _max - _min); int w2 = w/2; area2 = (h - h1) * w2; area3 = (h - h1) * (w - w2); _min = min(area1, min(area2, area3)); _max = max(area1, max(area2, area3)); ans = min(ans, _max - _min); } swap(w, h); for(int h1 = 1 ; h1 <= h ; h1++){ int area1 = h1 * w; int h2 = (h - h1)/2; int area2 = h2 * w; int area3 = (h-h1-h2) * w; int _min = min(area1, min(area2, area3)); int _max = max(area1, max(area2, area3)); ans = min(ans, _max - _min); int w2 = w/2; area2 = (h - h1) * w2; area3 = (h - h1) * (w - w2); _min = min(area1, min(area2, area3)); _max = max(area1, max(area2, area3)); ans = min(ans, _max - _min); } cout << ans << endl; }
問題D: 3N Numbers
どうやったらいいかわからず解説見ながら解いた(それでも最初わからないのでダメ)
#include<bits/stdc++.h> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) using namespace std; typedef long long ll; signed main(){ int n; int data[300001]; ll s1[300001] = {0}; ll s2[300001] = {0}; scanf("%d", &n); REP(i, 1, 3 * n + 1) scanf("%d", data+i); priority_queue<int> q; REP(i, 1, n+1){ q.push(-data[i]); s1[n]+= data[i]; } REP(i, n+1, 2 * n + 1){ s1[i] = s1[i-1]; q.push(-data[i]); s1[i] += data[i]; int _min = q.top(); s1[i] += _min; q.pop(); } priority_queue<int> q2; for(int i = 3 * n ; i > 2 * n ; i--){ q2.push(data[i]); s2[2*n+1] += data[i]; } for(int i = 2 * n ; i > n ; i--){ s2[i] = s2[i+1]; q2.push(data[i]); s2[i] += data[i]; int _max = q2.top(); s2[i] -= _max; q2.pop(); } ll _max = numeric_limits<ll>::min(); REP(i, n, 2*n+1){ _max = max(_max, s1[i] - s2[i+1]); } printf("%lld\n", _max); }
最後のmaxを取るところ, 添字ずれるのに気づいておらず, ずっとmax(ans, s1[i]-s2[i])で計算していて悩んだ. max(ans, s1[i] - s1[i + 1])ですね.
ところでpriority_queueって最小ヒープどうやるんだろう. いまのところ負にすることで対応しているが…(std::priority_queue<int, vector
AtCoder Beginner Contest #63
問題はこちらからどうぞ.
問題A: Restricted
#include <iostream> using namespace std; int main(){ int a, b; cin >> a >> b; if(10 <= a + b) cout << "error" << endl; else cout << a + b << endl; }
問題B: Varied
#include<bits/stdc++.h> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) using namespace std; signed main(){ string s; cin >> s; set<char> st; rep(i, s.size()){ st.insert(s[i]); } if((int)s.size() == (int)st.size()) cout << "yes" << endl; else cout << "no" << endl; }
問題C: Bugged
#include<iostream> #include<vector> #include<algorithm> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) #define pb push_back using namespace std; signed main(){ int n; cin >> n; int sum = 0; vector<int> v; int in; rep(i, n){ cin >> in; sum += in; if(in%10 != 0) v.pb(in); } sort(v.begin(), v.end()); rep(i, v.size()){ if(sum % 10 != 0) break; sum -= v[i]; } if(sum % 10 == 0) sum = 0; cout << sum << endl; }
問題D: Widespread
#include<bits/stdc++.h> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) using namespace std; typedef long long ll; int h[100001]; ll n, a, b; bool check(ll t){ ll cnt = 0; rep(i, n){ if(h[i] > b * t){ cnt += (h[i] - b * t) / (a-b); if(((h[i] - b * t) % (a - b)) != 0) cnt++; } } return cnt <= t; } signed main(){ scanf("%lld %lld %lld", &n, &a, &b); rep(i, n) scanf("%d", h+i); ll l, r, mid, ans; l = 0; r = 1e9; while(l <= r){ mid = (l + r) / 2; if(check(mid)){ ans = mid; r = mid - 1; }else{ l = mid + 1; } } cout << ans << endl; }
AtCoder Beginner Contest #64
問題はこちらからどうぞ.
問題A: RGB Cards
#include <iostream> using namespace std; int main(){ int r, g, b; cin >> r >> g >> b; cout << ((r * 100 + g * 10 + b)%4==0?"YES":"NO") << endl; }
問題B: Traveling AtCoDeer Problem
#include<bits/stdc++.h> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) #define INF 1e9 using namespace std; signed main(){ int N; int _max, _min, a; cin >> N; _max = -1; _min = INF; rep(i,N){ cin >> a; _max = max(a, _max); _min = min(a, _min); } cout << _max - _min << endl; }
問題C: Colorful Leaderboard
#include<iostream> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) using namespace std; signed main(){ int N; int cnt[13] = {0}; int a; cin >> N; rep(i, N){ cin >> a; cnt[a/400]++; } int c1 = 0; rep(i, 8){ c1 += (cnt[i] > 0?1:0); } int c2 = 0; REP(i, 8, 13){ c2 += cnt[i]; } cout << (c1==0?1:c1) << " " << c1 + c2 << endl; }
問題D: Insertion
#include<bits/stdc++.h> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) using namespace std; typedef long long ll; typedef pair<int, int> pii; int gcd(int a,int b){return b?gcd(b,a%b):a;} int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; signed main(){ int n; string s1, s2, ans; int l, r; cin >> n; cin >> s1; l = r = 0; ans = ""; int a = 0; rep(i, s1.size()){ if(s1[i] == '(') l++; else r++; if(a > l - r) a = l-r; } rep(i, abs(a)){ ans += "("; } ans += s1; rep(i, l-r-a){ ans += ")"; } cout << ans << endl; }
Kotlinスタートブックを読んでいくよ【2日目】
第4章 基本的な文法
変数と基本データ型とそのリテラル
型 | ビット幅 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
- Doubleを表現するリテラルは, 123.4e2のような形で表現することができます.
- 0xを頭につけることで16進数, 0bを付けることで2進数を表現することができます.
その他の基本形
型 | 種類 |
---|---|
Boolean | 真偽値 |
Char | 文字 |
String | 文字列 |
- Booleanはtrueかfalseの2値しかとらない
- Charは1文字を表す(シングルクォートで表す)
- Stringは文字列(ダブルクオートで表す)
変数
変数の宣言は以下のように行う.
val 変数名: 型 = 式 var 変数名: 型 = 式
- valはimmutableであるため, 1度代入した後は変更ができない.
- 再代入をしたい場合は, 変数をvarで宣言する.
- 原則として, valを使用するべき,
型推論
val name: String = "d(^_^o)"
という記述は,
val name = "d(^_^o)"
と書くことができる.
様々なオブジェクト
文字列
- 文字列はimmutableである.
- Stringリテラルは, ダブルクオートで囲った0文字以上の文字列のこと.
- 以下のようなメソッドが定義されている.
名前 | 仕様 |
---|---|
length | 文字列の長さを返す |
capitalize | 1文字目を大文字にして返す |
isBlank | 空白 or 空文字であるかを判定する |
- 文字列リテラル内に${式}と記述することで, その場所に式が評価された値が埋め込まれる.(Stringテンプレート)
- ダブルクオーテーション3つ(“”“)で囲むことで, raw stringとなる.
- raw string内でもStringテンプレートは使用可能である.
- raw stringでは, 先頭に|を置いて目印にすることが多い.
""" | aaaa | bbbb | cccc """.trimMargin()
trimMargin()は, |をエスケープする.
fun String.trimMargin(marginPrefix: String = "|"): String (source)
配列
配列はクラスArrayで表現される. - 配列の生成方法
val arrays = arrayOfNulls<Int>(5) // デフォルトの値がNullの要素数5である配列 val strs = arrayOf("aaa", "bbb", "ccc") // 引数に指定した要素を持つ配列を生成する
- 配列のサイズは, プロパティsizeを使用する.
arrays.size // => 5
- 添字は0-indexである.
- ボクシングのオーバーヘッドが気になる場合は, intArrayOfのような関数を使うと良い.
リスト
- リストは順序付きのコレクション. listOfで生成.
val ints: List<Int> = listOf<Int>(1, 2, 3) println(ints.size) // => 3 println(ints[2]) // => 3
- リストは要素の変更はできない. 通常のListはimmutableである.
- mutableなリストは, MutableListというインタフェースで表現される.
val ints: MutableList<Int> = mutableListOf(1, 2) ints[1] = 3 println(ints) // => [1, 3]
セット
セットは集合を表すコレクション
val im_set: Set<Int> = setOf(1, 2, 2, 3, 3, 1) println(im_set) // => 1, 2, 3 val m_set: MutableSet<Int> = mutableSetOf(1, 2, 2, 3, 3, 1) m_set -= 2 println(m_set) // => 1, 3
- セットは順序関係がないため, インデックスでのアクセスはできない.
マップ
マップはキーとそれに対応する値を保持するコレクション
// MutableMap<keyの型, valueの型> val m1: MutableMap<String, Int> = mutableMapOf("one" to 1, "two" to 2) println(m1) // => {one=1, two=2} println(m1.size) // => 2 println(m1["one"]) // => 1 m1 += "three" to 3 // 要素を追加 println(m1) // => {one=1, two=2, three=3}
- mapに格納する値は, Pairオブジェクトである必要がある.
- Pairオブジェクトは,
to の形式で生成可能.
とりあえず今日はここまで. (P55)
Kotlinスタートブックを読んでいくよ【1日目】
先日行われたGoogle I/OでKotlinが制式採用されることが発表になりましたね.
ちょっときになったのでKotlinスタートブックを手に入れました. 最初から無理のないペースで読んでいき, メモ代わりにブログを書いていこうと思います.
第1章 Kotlinとは
Kotlin(ことりん)とは, あのIntelliJ IDEAやWeb Stormなどで有名なJetBrainsが開発している言語です. いわゆるJVM言語であり, JavaとKotlinの相互運用性は100%だそうです. Javaよりも簡潔に記述することができ, 安全なコードを記述することができるのも特徴と言えるでしょう.
第2章 Kotlinを始める
最初のプログラム
こういうときのお決まり, Hello world!からKotlinの特徴を見てみる.
package sample fun main(args: Array<String>){ println("Hello, world!") }
- 関数がクラスに属していない
Kotlinでは, 関数や変数が必ずしもクラスに属している必要はありません. - セミコロン不要
セミコロンがあっても動作はします. - 型名は後ろに
Arrayargsではなく, Array argsです. - 関数定義はfun
第3章 Kotlinガイドツアー
有理数クラスを作る過程を通してKotlinの雰囲気をつかんでいきます. 有理数クラスってなんか聞いたことあるなと思ったら, Scalaスケーラブルプログラミング(通称コップ本)のやつでした.
有理数クラスの定義
まずはRationalクラスを定義していきます.
class Rational(val numerator: Int, val denominator: Int)
- クラス名の後ろに定義されているコンストラクタを, プライマリコンストラクタと呼ぶ.
- 変数名の後ろに, valもしくはvarを書くことでプロパティになる.(プロパティとは, getter, setterとfieldが合わさったようなもの)
- valはimmutable, varはmutableな変数である. 実際にインスタンス化して試してみる.
class Rational(val numerator: Int, val denominator: Int) fun main(args: Array<String>) { val half = Rational(1, 2) println(half.numerator) // 1 println(half.denominator) // 2 }
numeratorとdenominatorはvalで宣言されているため, 以下のようなコードは実行できません.
class Rational(val numerator: Int, val denominator: Int) fun main(args: Array<String>) { val half = Rational(1, 2) half.denominator = 2 // denominatorはimmutableなため }
メソッドの定義
オブジェクトの文字列表現を返すtoStringは標準では「クラス名@ハッシュ値」であるため, これを意味のある文字列を返す関数に書き換える(Overrideする)
class Rational(val numerator: Int, val denominator: Int){ override fun toString(): String = "${numerator}/${denominator}" } fun main(args: Array<String>) { val half = Rational(1, 2) println(half) // 1/2 }
- メソッドシグネチャ = hogeというのは, メソッドの戻り値がhogeであることを示しています.
- 文字列リテラル内の"${…}“という表現は, 波括弧内の式を評価し埋め込む機能(Stringテンプレート)です.
イニシャライザ
初期化ついでに何か行いたいときには, initブロックを活用します. 今回は分母が0の場合に例外をスローする処理を書いていきます.
class Rational(val numerator: Int, val denominator: Int){ init { require(denominator != 0, {"denominator must not be null"}) } override fun toString(): String = "${numerator}/${denominator}" } fun main(args: Array<String>) { val half = Rational(1, 2) println(half) }
- requireは, 第一引数がfalseのときに, IllegalArgumentExceptionがスルーされる関数. この関数で以下のようなコードを実行すると
class Rational(val numerator: Int, val denominator: Int){ init { require(denominator != 0, {"denominator must not be null"}) } override fun toString(): String = "${numerator}/${denominator}" } fun main(args: Array<String>) { val half = Rational(1, 0) }
次のようにエラーとなります.
Exception in thread "main" java.lang.IllegalArgumentException: denominator must not be null at Rational.&lt;init&gt;(Simplest version.kt:8) at Simplest_versionKt.main(Simplest version.kt:14)
非公開プロパティとメソッド
続いて, 約分を実装していきます. 約分は分母と分子のgcdでそれぞれを割れば良いです.
class Rational(val n: Int, val d: Int) init { require(d != 0, {"denominator must not be null"}) } private val g = gcd(Math.abs(d), Math.abs(n)) val numerator = n / g val denominator = d / g override fun toString(): String = "${numerator}/${denominator}" tailrec private fun gcd(a: Int, b: Int) = if(b == 0) a else (b, a%b) } fun main(args: Array<String>) { val half = Rational(55, 100) println(half) // 11/20 }
- tailrecは末尾再帰最適化処理
実行すると, 11/20と表示されます.
演算子オーバーロード
有理数同士で演算できたら嬉しいので, その機能を実現するメソッドplusを実装します.
class Rational(val n: Int, val d: Int) init { require(d != 0, {"denominator must not be null"}) } private val g = gcd(Math.abs(d), Math.abs(n)) val numerator = n / g val denominator = d / g override fun toString(): String = "${numerator}/${denominator}" tailrec private fun gcd(a: Int, b: Int) = if(b == 0) a else (b, a%b) fun plus(that: Rational): Rational = Rational( numerator * that.denominator + that.numerator * denominator, denominator * that.denominator ) } fun main(args: Array<String>) { val r1 = Rational(1, 4) val r2 = Rational(1, 2) println(r1.plus(r2)) // 3/4 }
- Rationalはimmutableなので, plusメソッドでは新たなRationalインスタンスを生成して返している点に注意.
先程よりは便利になりましたが, r1 + r2のように書くことができたらなお便利になりそうです. そこで演算子のオーバーロードが活躍します.
operator fun plus(that: Rational): Rational = Rational( numerator * that.denominator + that.numerator * denominator, denominator * that.denominator )
メソッドplusに修飾子operatorを付けることで, r1 + r2のような演算を実現することができます.
fun main(args: Array<String>) { val r1 = Rational(1, 4) val r2 = Rational(1, 2) println(r1 + r2)) // => 3/4 }
オーバーロードに対応するメソッドシグネチャは予め決められている. (a-bはa.minus(b)とか)
メソッドのオーバーロード
メソッド名は同じであるが, 引数の型や数が異なるメソッドを複数定義することをオーバーロードと言います. 先ほどの計算では, Rational + Rationalでしたが, Rational + Int(たとえばRational(1, 2) + 1)を実現できたら嬉しそうです. そこで, 次のような関数を追加します.
operator fun plus(n: Int): Rational = Rational(numerator + n * denominator, denominator)
これで, Rational(1, 2) + 1のような演算を実現することができます.
拡張関数
Rational + Intの演算は前の節で実現できたが, 1 + Rationalは実現できていない. しかし, レシーバーであるIntにはそのようなメソッドは実装されていないため実際はできません. そこで, 既存のクラスやインスタンスを拡張する拡張関数(extension function)を定義してあげてこの機能を実現します.
operator fun Int.plus(r: Rational): Rational = r + this
拡張関数を使うとクラスを継承することなく機能を追加できるというわけですね.
最終的なコード
class Rational(n: Int, d: Int){ init { require(d != 0, {"denominator must not be null"}) } private val g = gcd(Math.abs(d), Math.abs(n)) val numerator = n / g val denominator = d / g override fun toString(): String = "${numerator}/${denominator}" tailrec private fun gcd(a: Int, b: Int): Int = if(b == 0) a else gcd(b, a % b) operator fun plus(n: Int): Rational = Rational(numerator + n * denominator, denominator) operator fun plus(that: Rational): Rational = Rational( numerator * that.denominator + that.numerator * denominator, denominator * that.denominator ) } operator fun Int.plus(r: Rational): Rational = r + this fun main(args: Array<String>) { val r1 = Rational(1, 4) val r2 = Rational(1, 2) println(r1 + r2) println(r1 + 1) println(1 + r1) }
本の方だと, numeratorやdenominator, gがlazyになっていた.
private val g by lazy { gcd(Math.abs(d), Math.abs(n)) } val numerator: Int by lazy{n / g} val denominator: Int by lazy{d / g}
lazyはlambdaをとるっぽい.
今日はここまで(P38まで読んだ)
【POJ 1862】Stripies
問題
方針
- 入力された値を降順ソートする.
- 質量m1とm2の物体があった時, で求められるので, これを先頭から順にやっていく.
コード
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<cctype> #include<climits> #include<iostream> #include<string> #include<vector> #include<map> #include<list> #include<queue> #include<deque> #include<algorithm> #include<numeric> #include<utility> #include<complex> #include<memory> #include<functional> #define rep(i, n) REP(i, 0, n) #define REP(i, a, n) for(int i = a ; i < (int)n ; i++) #define ALL(v) v.begin(), v.end() #define pb push_back using namespace std; signed main(){ int n; vector<int> v; int in; scanf("%d", &n); rep(i, n){ cin >> in; v.pb(in); } sort(ALL(v), greater<int>()); double ans = v[0]; REP(i, 1, n){ ans *= v[i]; ans = 2 * sqrt(ans); } printf("%.3f\n", ans); }