プログラミング・IT・英語・数学とか

英検1級、TOEIC満点(990点)、セキュリティスペシャリスト、DBスペシャリスト、ネットワークスペシャリスト。英語とITとか。いろいろ試してみたことを書いていきます

bzrを使い始める前に知っておきたかったこと

bzrを使い始める前に知っておきたかったこと

バージョン管理システムにbzrを使っていて「これを始めに知っておけばもう少し楽に学べたのに・・・」と思うことを書こうと思います。

bzrはGitなどに比べて情報量も少ないですし、とくに日本語の情報は少ないので慣れるまでにかなりの時間がかかるのではないかと思います。

実際、自分は慣れるまでにかなり時間がかかりましたし、まだなれていないことも多々あります。。。これからbzrを使い始める人の手助けに少しでもなれば。

できるだけ調べて書いていますが、もし間違っていることがあればお知らせください。

その1. bzrにはtrunkとかmasterの概念はない。すべてbranch。

ここが一番他のVCSと違うところなんじゃないかなと個人的には感じます。

他のバージョン管理システムにはtrunkとかmasterというメインとなるレポジトリがあって、それから派生したbranchという概念があると思いますが。bzrにはありません。すべてがbranchです。

メインで使っているものでも、バグフィックス用に作ったものでも、機能追加用のものでも、すべてbranchです。branch間の親子関係などを設定することはできますが、branchそのものがtrunkかどうかという情報はbzrのシステム上もっていません。

これが結構厄介で、特に自分がそうなのですが、あまりGitなどの他のバージョン管理システムを使ったことがない人は、メインで使っているトランクだろうが、自分のローカルにあるブランチだろうが、すべてbranchだという意識でいます。

なのですべてを「ブランチ」と呼んでいます。そうすると、他の人と会話をするときにいちいち訂正されたりします。

自分「じゃぁ、さっきの変更をメインのブランチにプッシュしておきますね、、、」

他人「え、あれ、マージする先はブランチじゃなくてトランクでしょ?」

自分「あ、すみません、そうですね、トランクですね。自分のブランチからトランクにプッシュしておきます。。。(bzrはブランチしかないんだけどなぁ。。。だからわざわざメインのブランチって言ってるんだけど。まぁでもトランクの方が短いし言いやすいから理にかなってるか。。。)」

なんでもかんでもブランチブランチという人がいたら、あぁこの人はbzrしか使ったことがないんだろうなと、優しい目で見てあげてください。。。

え、じゃぁ、どうやってtrunkを指定するの???

ここまで読んで疑問になるかと思います。では、どうやってtrunkだとわかるのか。

bzrにはtrunk機能はありませんので、どのbranchをtrunkとして扱うかを決めるのは人間の仕事です。

どこのディレクトリにあるbranchがtrunkなのか、bzrを使う人が決めなければいけません。運用上の決まりとして共通理解として開発者/運用者みんなが認識しておく必要があります。

その2. .bzr ディレクトリと branch は1対1の関係がある(基本的には)

ここも他のバージョン管理システムと大きく違うのではと思います。

bzrの基本的な考え方としては、あるディレクトリが1つのbranchを表します。もう少し正確には、あるディレクトリの中にある.bzrディレクトリにがあれば、そこにbranchがあります。

ディレクトリとbranchが1対1で紐づくので、ディレクトリ構成を見ればブランチの構成もわかるので楽かもしれません。

以下のようにディレクトリ構造でメインブランチとその他のブランチを分けている運用にしたときには、ディレクトリとbranchが1対1で紐づくということがわかっていればすんなり理解できます。自分はディレクトリ=branchの関係が最初わかっていなかったので、この構造の意味不明で苦労しました(笑)

    shohei/test
            |-- .bzr ★ここがメインブランチ
            |
            `-- branches
                `-- test.new_feature
                    `-- .bzr  ★ここがその他のブランチの1つ
いやいや、こんなディレクトリ管理は面倒なんだけど、、、

見出しにも書いたとおり、「基本的には」ディレクトリとbranchが1対1での運用ができます。しかし、ディレクトリ管理はしたくないという方もいると思います。

そんな方には、colocated branchというのもあるようです。自分は使ったことはないのですが、colocated branchを使うことにより1つのディレクトリの中に複数のbranchを入れることができ、branch間を簡単にスイッチできるらしいです。

もし、そのような管理がしたいのであれば試してみると良いかもしれないですね。

その3. レポジトリがなくても良い

bzr explorerを使っていてbranchを作ろうとするときに聞かれるのが「レポジトリを作成しますか」という質問。

「え、だってbranch作るってことはレポジトリ作るってことでしょ??作らないことなんてできるの??」と、最初はこの質問の意味がわかりませんでしたw

bzrでの「レポジトリ」とは、「複数のbranchにまたがるファイル履歴を一箇所で管理する仕組み」で、これで何が嬉しいのかというと、レポジトリを作成するとストレージ量を抑えることができます。

たとえば、あるメインのbranchがあり、そこに同時並行で新しい機能を3つ追加する場合、機能A用branch、機能B用branch、機能C用branchを作ります。

そうすると、機能A、B、C用branchではほぼすべての履歴が同じになります。それを別々のbranchで管理すると、コピーが作成されるので単純にファイル容量が3倍とかになります。

代わりに、レポジトリを作成して、それぞれのbranchで管理するのではなくレポジトリー一箇所で管理をすれば、履歴は1つだけ管理すればよく、コピー分のファイル容量が減ります。

なので、同じ履歴をもつbranchを複数作るのであれば、レポジトリは作っておいたほうが良いです。

逆に言えば、branchを1つしか作らないのであれば、作っても作らなくても一緒だと思います。

【レビュー】【体験談】【立ち飲みバー】有楽町・新橋・銀座付近でオススメの立ち飲みバー

「銀座でリーズナブルに飲めて食べられる立ち飲みバーなんてあるのだろうか、、、」
なんて方、ご心配なく!ありますあります銀座にも、リーズナブルにご飯を食べてアルコールを飲める場所が!

個人的には銀座でクラブ行く前に立ち飲みバーでテンションを上げていきますが、クラブ前に行く以外にも、0次会、二次会、ナンパ、友達作り、一人飲み、ふつうに友達と飲みたいときにも使えるオールマイティーな場所が立ち飲みバー。

今回は、毎週自分がクラブに行く前によく行く立ち飲みバーを紹介していきたいと思います。
あ、ちなみに自分がよく行くクラブ、ジーニアスについては↓からどうぞ(笑)

shoheyhey0821.hatenablog.jp

行くところが増えてきたら追記していきたいと思います。 

 

1. 333(トリプルスリー)

bar333.jp

 

アクセス/場所

新橋駅から徒歩10分くらい、有楽町駅から徒歩5分くらいです。どちらからもアクセス良いです。地下にあり、入り口は少し奥に入ったところにあるのですこしわかりにくいかも。
個人的には、自分がよく行くGENIUS TOKYOに徒歩1分くらいなので気に入っています(笑)

客層/年齢層/男女比率

客層は若い人が多いですね。だいたい20~30代前半の人たち。男性はみんなサラリーマンっぽい人が多いですね。スーツ姿。女性はどんな人がきているか。。。渋谷とかの立ち飲みバーには多いですけど、こちらのバーには外国人はあまりいないですね。たまに1人、2人見るくらいです。
男女比率は8:2で男性が多いですね。まさに男性で溢れかえっているときもあります。男性にとってはあまりおいしくないですが、逆に出会いを求めている女性にとっては良いのかも(笑)
場所が銀座だからなのか、渋谷とかに比べると、落ち着いた人が多い気がします。なんか騒いでる人とか、強引なナンパしている人も少ない気がします。

メニュー

ドリンクは種類が豊富な感じです。フードメニューは少ない感じですね。からあげとか枝豆とかたこ焼きとかピザとか、つまみ系のものはありますがガッツリ食べたい人には向かない場所かなと。やっぱり立ち飲みでサクッと行くという場所ですね。

値段

やっぱり安いですね。お店の名前になっているようにだいたい1品333円です。ただ、中には666円のものもありますのでメニューでご確認を。

内装/雰囲気

店内はとてもキレイです。最近できたのかもしれません。ちょっと暗めで雰囲気も良い感じです。DJブースもありEDMが流れているので、洋楽好きな人にはプラスで楽しいと思います。

ナンパ

まぁ、多いですね、ナンパは。ほぼ100%の男性はナンパに来てますし(笑)女性もナンパ待ちが多いんだと思います。女性に周りにはだいたい男性がいて、その女性がフリーになるのを待ってる男性がさらに周りにいる感じで、男性で溢れていますねだいたい(笑)

混雑具合

9時くらいまでは結構空いています。自分が飲むスペースを見つけるのも9時前であれば比較的簡単です。9時以降はだんだん混んできて、10時にはカウンターのスペースを見つけるのも大変になります。

広さ

そんなに広くもなく、小さくもないといったサイズです。100人くらい入ったら、もう誰も身動きできないくらいの広さかなと。

2. TOKYO GINZA 300BAR NEXT

www.300bar-next.com

アクセス/場所

有楽町駅から徒歩5分くらいのところにあるバーです。こちらも地下にありますが、お店の外に大きな黄色い看板が出ているので見つけやすいと思います。

客層/年齢層/男女比率

若い人が多いですね。みんな20代なんじゃないかと。たまに30代くらいの男女もいましたけど、やっぱり安い値段につれられて若い人が集まるんだと思います。外国人の姿はあまりなく、ちらほらな感じでした。
男女比は7:3くらいで男性が多いです。

メニュー

ドリンクはいろいろと種類がありました。フードメニューはあまり多くないイメージですね。でも、フードは1品1品がとても美味しいです。特に、ジャークチキンとブロシェットはオススメです。これホントに300円で良いの??ってくらいクオリティ高いです。。。きっとですが、赤字ですよお店。。。量も多いし美味しいし見た目もキレイで普通にお店で食べたら倍の値段はするのではと思います。飲み物と一緒に、ぜひお試しあれ。

値段

ほぼ全品300円です。盛り合わせとかは600円だった気がしますが。

内装/雰囲気

テーブルやカウンターに木が使われていて、照明も暗めで、とても落ち着いた雰囲気です。

ナンパ

ここもナンパバーなのでナンパだらけですね(笑)

混雑具合

やっぱり21時以降には混み混みです。ゆっくりドリンクを飲みたいなら20時くらいには行ったほうが良いでしょう。逆にナンパが目的であれば、21時以降が良いでしょう。

広さ

店内は広めです。それに天井も高いので、実際よりも広く感じます。

 

まとめ

いかかでしたか?とりあえず2つ紹介してみました。
これから増えていくようであれば追加していこうと思います。

では、立ち飲みバーで楽しい夜を!

【湾仔(ワンチャイ)】香港のオススメなクラブはここだ!

香港の湾仔(ワンチャイ)でオススメなクラブはここ!

先週、香港旅行に行ってきました。

せっかく香港に来たんだから、夜は香港のクラブを楽しみたい!と思い、いろいろ調べてみたら、クラブがあるのは蘭桂坊(ランカイフォン)というエリアだとのこと。

でも、蘭桂坊(ランカイフォン)のクラブは高そう・・・。入店するだけで5000円とかするらしいし、ドリンクは1000円するらしいし、盛り上がる時間も遅そうだし、人でごった返してて踊れなさそうだし・・・。それよりはもうちょっと落ち着いたところが自分はいいな~と。

そう思って他のエリアで探してみたら、湾仔(ワンチャイ)エリアにもクラブはありそうだとわかり、向かった先で見つけたのがこのクラブ!
本当はバーらしいですけど、音楽は流れてるし、みんな踊ってるし、クラブと変わらないので蘭桂坊(ランカイフォン)のクラブにいくより楽しめるはず!(さらに良いことに、クラブでなくバーなのでドアでのチャージがなくてお得です(笑))
それでは早速見ていきましょう。
 

 Joe Bananas

http://www.joebananas.hk/

いろいろと行ったお店の中で最終的に見つけたのがこのバー!めちゃくちゃ楽しくてほとんどこのお店で踊ってました(笑) 

本当は行こうとしていたのは湾仔(ワンチャイ)のEscapeというクラブだったのですが、ここが楽しくて結局いけませんでした(笑) それくらい楽しい!ぜひぜひ行って見てほしい!!

盛り上がる時間帯

12時に行ったので何時から盛り上がるのかはわかりませんが、12時にはもう満席でフロアも満員状態でした!おそらくですけど11時くらいに行っても盛り上がっているのではないかと思います。1時2時とかは遅すぎるな~、、、と思っている人は必見です!

ドアチャージ

バーなのでドアチャージはありません。何回でも出入り自由!自由最高!!

ドリンクの値段

残念ながらドリンクは高いです・・・。日本のクラブよりも高いんじゃないかと。自分の好きなコロナビールが79ドル=1,100円くらいでした。いつも行ってるジニアスでは600円くらいなのでめちゃくちゃ高く感じる。。。でもまぁ、ドアチャージがないのであまり飲まなければ安上がりですかね(笑)

しかし!ドリンクは高いんですが、すぐ外にコンビニがあるのでそこでドリンク買えちゃいます!コンビニは神!(しかもコンビニのカウンターに栓抜きがおいてあります。わかってます、コンビニ)
 あ、でもバーのためにも1杯くらいは店内でドリンクを買いましょう(笑)

大きさ

お店自体はそれなりに大きいですが、バーがほとんどのスペースを占めています。ダンスフロアーは30人くらいでいっぱいになるくらいの広さです。

音楽

ライブバンドが生演奏しているので音楽は最高です!バンドのライブが半分くらい、あとの半分はEDMを流してました。音楽流してたDBがどこかにいたのかな?ライブバンドはめちゃくちゃ盛り上がります!曲はだいたい2000年~2010年前半の曲がかかっていました。逆に90年台とかの曲は流れなかったので、オールディーズを聴きたい人には向かないかも。

客層

観光客ばかりでした。現地の香港人はいたのかな?誰一人として見なかった気がします。アジア人は自分たちを含めてチラホラでした。
年齢層は男女どちらも若い人ばっかりでした。男女比はほぼ半々くらいだったので、男女どちらも楽しめると思います。
日本人はいなかったですね。あんなに楽しいのに、ガイドブックにもどこにも載ってないようなバーなので知られてないんでしょうね、きっと。。。このブログがきっかけになって行く日本人が増えたらいいな(笑)

場所/アクセス

湾仔(ワンチャイ)駅から歩いて5分くらいなので、アクセスはとても良いです。

安全性

湾仔(ワンチャイ)エリアはお世辞にもキレイでガラの良いエリアとは言えませんね(笑)
でも、怖い人いたりとかはしないです。女性一人でも歩いていて問題ないですし、そもそも大通りはいつも誰かが歩いているので一人になることはないです。安全安全!

 

おまけ:他に行ったクラブ/バー

本当は、Escapeというクラブを目指して行ったのですが、Joe Bananasが楽しくてそこで踊って満足して帰ってしまいました(笑) こんな感じで予定通りに行かない旅行は楽しいですね!これぞ旅の醍醐味!

ちなみに、Joe Bananas以外に行ったクラブ/バーはこちら。

  • AMAZONIA
  • Taboo Bar

どちらもバーなので、入出店は自由です。どちらもダンスフロアがあってライブバンドでそんなに悪くなかったですが、あんまり盛り上がってなかったので10分くらいでどちらも出てしまいました。もしかしたらタイミングが悪かっただけなのかもしれないので、よかったら試してみるのもありです。もしくはEscape行かれた方がいたらぜひ感想を聞きたいです!

以上、自分の体験が参考になれば!
ではでは、香港で楽しいクラブナイトを!

 

【体験談】【感想】東京で終電まで楽しめるクラブ(その1) GENIUS TOKYO

クラブには行ってみたいけど、、、

クラブには行ってみたいけど、オールナイトはきついなぁ・・・。という人に、終電まで盛り上がって楽しめるクラブを記事を分けていくつか紹介したいと思います。

 今回紹介するのは銀座にある「GENIUS TOKYO」というクラブ。その1ということで、自分が一番好きなクラブです。自分は楽しすぎて毎週行ってますw

 

GENIUS TOKYOはこんなクラブ

アクセス

GENIUSがあるのは新橋駅と有楽町駅の間くらいの位置です。

どちらかというと新橋駅よりは有楽町駅に近いです。

有楽町駅からは歩いて5~6分くらい、新橋駅からは12~13分くらいだと思います。 

年齢層

若い人ばっかりいるクラブをイメージしている人はGENIUSに行ったらびっくりするかもしれないですwww

お客さんは男女どちらもアラサー・アラフォーの人が多いです。20代の人もいますが、割り合い的には全体の3、4割くらいだと思います。

クラブというよりは、ディスコと言ったほうがイメージに近いのかも(と言いつつディスコって行ったことないんですがw)

男女比率

やっぱりお客さんは男性の方が多いですね。

早い時間は6:4くらいで男性が多い気がします。

遅い時間には7:3くらいじゃないでしょうか。(遅い時間と言っても終電前ですけどw)

フロア

建物自体それほど大きくないですが、ダンスフロアは2フロアーあります。

アップテンポのEDMが流れるメインフロアーと、ゆっくりなR&Bが中心のバーフロアー。バーフロアーは土曜日は開いてない日もあるようですね。

23時くらいになるとメインフロアーはぎゅうぎゅう詰めになるので、バーフロアーでまったりするのが吉です。

値段

銀座だからなのか値段は六本木や渋谷のクラブに比べたら高い気がします。

曜日とかイベントによって変わるかもしれませんが、自分が行く金曜日は基本的には男性5000円、女性2000円です。それで2ドリンクつきます。

なんですが(!)、21時前に入店すると男性2000円、女性1000円で、21時までは飲み放題プラス2ドリンクつきます!(飲み放題にはビールとか含まれないですが、まぁそれでもアルコールは飲めるのでw)

飲み放題目があるので、フリードリンク目当てで自分はいつも20時半くらいに行ってドリンクを何杯か飲んでテンション上げてから踊って、あとから2ドリンク飲んで楽しんでますw これで2000円は安いですほんとwww

(あ、飲み放題がお好きな方は六本木のジュマンジってところは11時まで飲み放題ですのでお試しあれw)

もし21時以降に行くのであれば5000円ですが、クーポン使うと1000円引きになります。

クーポンはいろいろあると思いますが、オンラインのものだったらイベントサーチとかホットペッパーとか、いろいろあります。

追記(2018/06/02):どうやらイベントサーチのクーポンは金曜日しかないようです。。。でも、5000円が2500円になるのでぜひチェックしてください!

適当に「GENIUS TOKYO クーポン」でぐぐったらいろいろと出てくると思います。その他にも、1回行くとクーポンもらえるので、それも使えますね。

音楽

かかるのは少し古めの音楽ですね。最新の曲は流れない感じです。

なので最新ヒット曲を聴きたいのであればGENIUSは楽しくないかも。。。たまに流れるのかもしれませんが、自分が最新の曲を知らないので、自分が知らない古い曲なのか最新の曲なのかわからないですww

流れるのは何年か前のヒット曲や十数年前のヒット曲です。なので、誰でも一度は聞いたことのあるような曲が多く流れます。

もし、クラブが初めてでも「あ、これ知ってる!」って曲があって楽しめると思います。

音質

正直、音質は良くない気がします。音楽にこだわらない自分が気がつくらいなので、音質は良くないんだと思います。

音量もそれほど大きくないです。なので話はしやすいですね。いやまぁ、スピーカーの前に行ったら、そりゃうるさいですけどね(笑)

アラサー・アラフォーが多いジニアスは気遣って耳に優しい設計になっているのかもしれない、と勝手に思ってますwww 

ナンパ

ナンパは他のクラブに比べたら少ないんじゃないかなと思います。

銀座クオリティーで、ナンパがあったとしてもとても紳士な感じ(主観)w

アラサー・アラフォーの方は(自分もそうですけど、)飲んで歌って踊って楽しみに来ている人が多い感じなので、ナンパよりはフロアで踊り狂ってる人が多いです印象です。

女性の方でただ単にお酒飲んでダンスしたいって人は絡まれるの少なくて良いんじゃないかと。逆に、ナンパ目的の男性は競争相手少ないのでGENIUSはチャンスかとww

盛り上がるのは何時か

金曜日しかわかりませんが、だいたい21時半くらいから盛り上がり出します。

早いときには21時からフロアが埋まってるときもあります。22時にはもうフロアはごった返して、23時には満員電車状態ですwww

じゃあ、いつ入店するのがベストかというと、20時半~20:45がベストだと思います。値段安いですし、そこから飲み放題のドリンクを何杯か飲んで、気持ちよくなったタイミングくらいでお店全体が盛り上がってくるので、そこからみんなで踊って楽しめますw

まとめ

ということで、今回はGENIUSを紹介しました。はじめての人でも絶対に楽しめるオススメなクラブです。ぜひ友達と繰り出して、クラブライフを楽しんでみてください!

Meetup体験記 2018/03/14 Friendly Singles Party for Non-Japanese Women and Japanese Men 日本人男性×外国人女性

ホワイトデーに日本人男性x外国人女性のmeetup

ホワイトデーにぴったりな、おもしろいMeetup見つけたので行ってきました。

その名もなんと「Friendly Singles Party for Non-Japanese Women and Japanese Men 日本人男性×外国人女性」w

おいおいマジかとw
国際化が進む現代に、まさにドンピシャのmeetupw 日本人男性x外国人女性なんて考えた人は天才だと思いましたww

ということで行ってきました。

場所

場所は、原宿にあるイベントスペースのajitoというところでした。内装はふつうのバーのような感じで、暗くなく明るすぎず、音楽も気持ち程度にかかっていて居心地よかったです。うるさくないので会話もしやすかったところが良かった。駅からも近いしアクセスも良いです。自分は横浜から行ったのでちょっと遠く感じましたけど、都内に住んでる人はアクセスが良いのではないでしょうか。

スタイル

だいたいいつもスタンディングが多いですけど、ここはソファーがたくさんあって座って話ができるところでした。やっぱり座れるとリラックスできて会話もしやすいですね。ただ、話し始めてしまうとすこし移動はしにくいかもしれないですけどw

人数と男女比

人数はだいたい20人くらいですかね?早い時間も遅い時間も、それほど人数の変化はありませんでした。
男女比だいたい4:1くらいだったと思います。4人の男性で女性を1人囲んで話す感じでしたw

話しやすさ

その回によって違うと思いますが、自分が行った回はみんなフレンドリーで話しやすかったです。男性も女性も。さすがfriendly singles partyという名前にふさわしいフレンドリネスだと思いましたw

英語と日本語

やっぱり外国の女性に興味をもつ男性がくるので、会話も英語が多いんだろうなー、と思って行きましたが、そんなことはなく英語と日本語は半々くらいでした。女性が日本語で話したければ日本語で、英語だったら英語で、って感じで女の子に合わせるスタイルでした。
英語が苦手な人でも英語が得意な人でも、どちらでも楽しめる絶妙な割合だと思います。

価格

会費はちょっと高めかなーと思いましたが、まぁでもこんなものかと。男性4000円でドリンク1つ付きます。女性は1500円。追加のドリンクは500円でした。(自分はビールしか飲んでなかったですが、もしかしたらソフトドリンクは安かったのかもしれないです)

総合

やっぱり会費は高めかなーとは思いましたが、それに勝る質の高さでないかと思います。コスパ的にはかなり良いのではないかと。安いお金でぜんぜんつまらないより、少し会費が高くてもいろいろな人と会話できて楽しめる方がいいですしね。
なにより、日本人男性限定なのでイケメン外国人に会話を独占されることがなくていいですね(笑)イケメン外国人男性の前では前にいけない、自分のような内弁慶な性格な人には親しみやすいmeetupだと思います(・∀・)ニヤ
次回もあったらぜひ参加したいです。

その他

主催者の人はYouTuberをしてる人だそうで、その動画を見てmeetupに来る参加者もいるんだとか。
youtubeでお金を稼いでいろいろなところを旅して、たまに日本に帰ってきたときにmeetupを開くそうです。そんな自由な生活、なんて羨ましいw
そんな感じで不定期で開催するので次はいつになるのかわからないらしいです。月1回くらいのペースでやると言っていたので、次は4月なのかな~。

backtrack 5 のデフォルトパスワード

backtrack 5 のデフォルトパスワード

backtrack5 をダンロードしてvitualboxを使ってインストールして起動したら、デフォルトのパスワードがわからず。。。ググってわかったけど、これってみんな知っていることなのだろうか・・・?

 

ログイン:root

パスワード:toor

 

ちなみに、入った後にstartxコマンドでGUIが立ち上がる。

公式な情報は見つからなかったけど、どこかに書いてあるのかな。

 

参考

Default password and username for backtrack 5computerapplications102.wordpress.com

KotlinとScalaの違い (部分的な翻訳: Kotlin vs Scala: Which Problems Do They Solve?)

はじめに

KotlinろScalaって何が違うんだろう?って思っていろいろ探してみたところ、英語の記事があってわかりやすかったので、役に立ちそうな部分だけ部分的に翻訳してみました。1語1語訳していくと大変だし、ざっくり知りたい人には必要ないかなと思うので、けっこう省いて日本語にしてます。

時間がない人は、この記事の最後の方の「まとめ」部分だけを読んだら良いと思います。

間違いなどあったらごめんなさい。間違いを指摘してただけると助かります・・・。

そして、ぜひ原文もご参考にしてください。 

元記事

https://superkotlin.com/kotlin-vs-scala/

KotlinとScalaの違い

Javaに立ち向かえるような2大言語をあげるとしたら、ScalaとKotlinが挙げられるのではないでしょうか。少なくともJVMアプリケーションを使おうとしたときには、この2つがまず検討されると思います。

ScalaとKotlinは「Javaをより良くする」という目的のもと作られていることは同じですが、その方法はとても異なるものでした。

まず、Scalaは学者たちによって考え出されています。それに比べて、Kotlinはソフトウェア会社で作られています。Scala関数型言語や異なるプログラミングパラダイムを1つの言語に入れてみようという考えのもと作り出されており、一方、Kotlinは現実の問題を解決することに重きをおいており、コンパイル時間を短くしたりツールの充実などを図っています。

Scalaのすごいところは、JVM上で動く、新しい静的言語を作ることが可能だと証明したところにあります。その後、かなりの時間が経ってからKotlinが出現し、その頃にはJVM上で走る新言語を考えることよりも、実用的に使えることをより重要視するようになっていました。

以下では、KotlinとScalaを比較していきますが、技術的な機能ではなく、使い方の面で比較をしていきます。まず、2つの言語の機能の概要を見て、その後、何のために作られた言語なのか、に焦点をあてて見ていきます。

Javaの何が悪い?

KotlinもScalaJVM上で走るため、Javaとよく比較されます。では、Javaにはなにか悪いところがあるのでしょうか?

Javaは「一度書いたらどこでも使える」という売り文句で、またたく間に世に広がりました。

おそらく、世界で一番使われているプログラミング言語Javaでしょう。世界中の企業で使われ、大学のコースでも広く使われています。

Cより成長しC++よりきれいな言語であるJavaですが、最近では他の言語に遅れをとっています。C#と比べて劣ると言う人も多くいます。

「もっとJavaが生産性の高い言語だったらいいのに、」「もっと楽に楽しく使える言語だったらいいのに」と思う企業やプログラマーは多いことでしょう。また、Javaの言語仕様上の制約があり、その制約のために批判があるのも確かです。しかし、だからと言って、そう簡単にJavaを変えることはできません。世界中ですでに広く使われているために、悪い部分があっても根幹部分を変えることができないのです。(いきなりJavaそのものを変えたら、いままで作ったものが動かなくなってしまいますから)

KotlinとScalaの主な違い

オブジェクト指向

Javaオブジェクト指向の言語ですが、Java内のすべてがオブジェクトというわけではありません。例えば、intなどはプリミティブ型です。ScalaとKotlinではすべてがオブジェクトであり、オブジェクトとしてアクセスできます。

また、ScalaとKotlinは他のプログラミングパラダイムを取り込んでいます。Kotlinは主にオブジェクト思考ですが、普段のプログラミングで便利であろう機能を他のプログラミングパラダイムから取り込んでいます。

関数型プログラミング

 Kotlinは関数型プログラミングのすべての機能をサポートしているわけではありませんが、ラムダ式高階関数などの関数型プログラミングの機能をサポートしています。たとえば、以下の機能をサポートしています。

  • ユーティリティークラスを作ってメソッドをまとめなくても、関数だけを作るだけでOK。
  • Kotlinはstatementsではなくexpressionsを定義できるので、ifの結果などを変数に格納することができます。
  • varではなくValを使えばイミュータブルなデータを作れます。finalなどの修飾子は必要ありません。

Scala関数型プログラミングパラダイムオブジェクト指向プログラミングパラダイムの両方をサポートしています。Scalaを作った目的はまさにそれでした。Haskellで見られるカリー化、メモ化、Partial application、type classesなどのほとんどの機能を持っています。このような機能はKotlinやJavaにはありません。

Javaとの相互運用性

KotlinはJavaで動くことを考えられて設計された言語

KotlinはJavaとの相互運用性があるように作られた言語です。さらに言えば、Javaとの相互運用性を高めるための機能も意図的に実装されています。たとえば、JavaからKotlinのコードを簡単に呼び出せる仕組みも備わっています。ですので、レガシーなアプリケーションはJavaで開発し、新規開発はKotlinでする、ということも可能です。

AndroidでKotlinがこれだけ人気があるのは、KotlinがJava 6(現在のAndroidJavaバージョン)と相互運用性があるからでしょう。

Javaとの相互運用性が高いのは偶然ではなく、そもそもJetBrains社がKotlinを設計するときに当時のJavaの状況を加味して設計していたからです。どうしたらKotlinをもっと使いやすくできるかを考えて設計されています。その結果が、バイトコードの構成という点にまとめられます。そして、この点が、CordaがScalaではなくKotlinを選んだ理由の1つになっています。

ScalaJavaで動かすことは可能

より簡単にデプロイできるように、ScalaJVMプラットフォームで動くように作られました。しかしながら、相互運用性は一番の目的ではありませんでした。これは、技術的な話になり、言語の機能に関わる話になりますが、例えば、Scalaを動かすためにはJava 8が必要です。

これを踏まえると、ScalaJavaを行ったり来たりしながらの開発は難しく、Scalaの想定されたユースケースではありません。すでにあるJavaのコードベースをScalaから使えるかといえば、それは使うことはできますが。

関数型プログラミングオブジェクト指向プログラミングをサポートするために、Scalaでは互換性も犠牲にされています。もし、Scalaの高度な機能を使おうとすると、Javaでは何もできなくなってしまいます。もしできたとしても、Javaプログラマーはどのようにそれを使っていいのかはわからないでしょう。

哲学の違い

成功を収めている言語の多くは、明確な目的と、その言語がどうあるべきかというはっきりとした哲学を持っています。もちろんのこと、KotlinとScalaも例外ではありません。Kotlinはより良いJavaになることを目指し、ScalaJavaを超えた言語を作ろうとしていました。

Kotlinはより良いJava

Kotlinはすでに当初の目的は果たしたと言えるかもしれません。なんと言っても、KotlinはJavaの他にAddroidの開発言語として正式にサポートされた最初の言語になったのですから。それはつまり、JavaコミュニティがKotlinを気に入ったということ、そして、KotlinはJava開発者にとって受け入れやすいということを意味します。

Kotlinは実用性の高い言語であり、Java開発者にとっても親しみやすく、生産性を高めることができる言語です。基本的には、Javaのような言語にしようとしていますが、その上にC#やさらにはScalaの機能を取り込んでいます。Java開発者が欲しがるようなラムダ式や基本的な関数型プログラミングの機能、そしてプログラミングを楽にしてくれるsmart castingやnon-nullable typeの機能を追加されています。これにより、いままで冗長に書いていたコードを簡潔に書くことができます。

Kotlinでは関数型プログラミングがある程度サポートされていますが、それは手続き型/命令型プログラミングをより簡単にするためだけのものしかサポートされていません(例えば、個々の関数は独立して第一級オブジェクトとして扱えます)。Kotlinはフォーマルな関数型言語になろうとしているのではなく、シンプルであることを優先しています。

ScalaJavaを超えようとしている言語

ScalaはKotlinとはまったく別の目的を持っています。Scalaの目的はJavaより強力な言語、Javaでできないことができる言語、を作ることでした。

Scalaでは、オブジェクト指向プログラミングに加えて、高度な関数型プログラミングもサポートされています。そのためにScalaは複雑になり、学んだり使ったりするのが難しいという評判がつくようになりました。もちろんこれは言語自体に問題があるのではなく、単純に、多くのことができる言語であるために多くのことを学ぶ必要があるのです。

もちろんこと、正しく使えばメリットは大きいですが、正しく使わなければメリットは出なくなります。Scalaでは複数のプログラミングスタイルが存在し、どのスタイルがベストなのかは混乱のもとにもなっています。これにより、開発コストは高くなり、Scala開発者の収入も高水準であり、あなたの立場が開発者なのかそれとも開発者を雇う企業なのかによって、これは良い点にも悪い点にもなります。

言語を囲む世界

コミュニティ

Scalaの方が大きいコミュニティを持っています。言語の良し悪しは別にして、Scalaの方が長く存在しているのですから、もしかしたらそれは当然のことなのかもしれません。唯一、これが当てはまらないのはAndroid開発でしょう。Kotlinの人気の高さは、2017 Google I/OでのKotlin発表の様子からも明らかでしょう。

Kotlinのネイティブライブラリーがあまり充実していないことは、Javaとの互換性を取ることによりいくらか軽減されているでしょう。しかし、堅牢なKotlinライブラリーはScalaJavaのようには十分開発はされていません。

ドキュメント、学習しやすさ

どちらの言語もドキュメントは充実しています(古かったScalaウェブサイトも今では最新にアップデートされています)。Scalaを使う際には、まず開発者をトレーニングして、Scalaに慣れさせてから自身の開発スタイルを学習させる必要があります。Java開発者に数日ほどのトレーニングを受けさせれば、Scalaが使えるようになると思ってはいけません。そもそもJava開発者は、関数型プログラミングが何かも知らないかもしれませんから。それほどScalaJavaとは違うのです。

Kotlinは学びやすい言語であり、また、さらに実際に動かしてみることはさらに簡単です。オンラインの実行環境もあり、そこにはサンプルもあり、さらにJavaコードをKotlinに変換することもできます。なので、JavaでやっていたことをKotlinでどのように実装したら良いかがすぐにわかります。

ツール

ScalaとKotlinはどちらも静的型付けであり、コンパイル時チェックと静的分析ツールを利用できます。理論上は、どちらも同じポテンシャルを持っていると言えるでしょう。しかし、現状、Kotlinの方がツールは充実しています。名の知れたプログラミングツール開発会社であるJetBrains社がKotlinの開発元であることを考えると、驚くことではないでしょうが。ドキュメントについてはScalaが劣っているというよりは、Kotlinのドキュメントが素晴らしすぎるといったところでしょう。

以前は、Scalaの公式ウェブサイトではEclipseをベースとしたIDEを提供していました。今では、IntelliJScalaブラグインを使うことが勧められています。

一方、KotlinはすでにIntelliJ IDEAとAndroid Studioに組み込まれており、Eclipseにもプラグインが用意されています。さらに、IntelliJ IDEAには前述の変換ツールとオンラインでアクセスできるサンプルがあり、Javaのクラスを簡単に変換してKotlinをインタラクティブに学習することができます。もちろん、スタンドアローンコンパイラーを使い、自身の開発方法に合わせてKotlinを使うこともできます。

まとめ

Kotlinは開発工程の全体を見据えて作られた言語を言えるでしょう。ある機能が必要かどうか、コンパイラーの速度にどのように影響を与えるか、ツールを作ることが難しくなるだろうか、など、各設計がどのように開発のエクスペリエンスにインパクトを与えるかを考えて作られています。

Scalaは実用性を第一として考えられておらず、それとは別の目的(Javaより強力な言語、Javaでできないことができる言語を作ること)を持っています。ScalaC++に似ていて、とても豊富な機能が詰め込まれています。しかし、これが全員にとって使いやすい言語かというと、そうとは言えないのではないかと筆者は思います。

Javaよりも良い言語を求める人たち、そして、Javaに満足しきれなかった人たちの2種類の人たちがScalaを使い始めました。前者のほとんどはScalaに満足していますが、後者はScalaの複雑さに困惑させられることになります。それは当然のことで、ScalaJavaからは別物なのですから。そのような人たちにはKotlinがより良いチョイスとなるでしょう。