paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

【19卒】5月時点で4割以上が内定アリ!内定ゼロを脱出する3つのポイントとは

f:id:paiza:20180605123713j:plain
Photo by aiesecgermany
f:id:paiza:20140916135428p:plainこんにちは、谷口です。

就活生の皆さん、就活の進み具合はいかがですか?

リクルートキャリアの調査結果によると、2018年5月1日時点での大学生の就職内定率は42.7%で、前年同月の35.1%と比べて7.6ポイント高い数値となっています。すでに就活生の半数近くが内定を持っているということですね。

一方で、まだ内定がない人の中には「就活してるつもりだけどなかなかうまくいかない…」と焦りを感じている人もいるかと思います。paiza新卒でも「まだ内定がなくて、どうすればいいのかわからない…」といったご相談が増えてきました。

今回は「就活やってるつもりだけどまだ内定ゼロ」な人が、内定獲得のためにどんな対策をとれるかについてお話しします。

■19卒予定者、5月1日時点での内定率速報

リクルートキャリアの調査によると、5月1日時点で2019年卒業予定者の就職内定率は42.7%という速報値が出ています。(※大学院生除く)

www.recruitcareer.co.jp

現在は6月に入り、内定をもらって就活を終了する学生も増えてきた時期ではあります。

一方で、通年採用や二次募集を実施する企業も多く、新卒求人数自体は大幅に減少しているわけではありません。

では、まだ内定ゼロの就活生は、これから何を見直してどんな対策をとればよいのでしょうか?

■まだ内定がない就活生が見直すべきポイント

◆応募先を見直す

内定がない原因のひとつとして、志望業界や応募企業を絞りすぎているケースがあります。

例えばITエンジニア志望者でいうと

  • ゲーム開発ならイメージがわくからゲームを作っている企業に行きたい、B2Bのサービスはよくわからないからやめておこう
  • 学校でPythonを中心に勉強してきたので、Pythonがメイン言語の企業しか見ていない

といった感じで応募先を絞りすぎて、全部落ちたら条件に合う企業がなくなってしまった……という人です。

好きな技術や進みたい分野にこだわりを持つのは悪いことではありませんし、無理に諦める必要はありません。

ただ、さまざまな企業が多くの求人を出しているのに、実態をよく知らずにイメージだけで決めつけたり、必要以上に応募条件を厳しくしたりして、チャンスを逃してしまうのはもったいないことです。

「応募先がなくなってしまった」「同じような企業を受けてきたが選考を通過できなかった」という人は、先入観やイメージにとらわれず、広く情報収集をして、実際に応募してみると新たな道が開けるはずです。もし選考を受ける中で、「やっぱり違うな」と思うなら、途中で辞退すればよいだけです。

前述の例では

  • ゲーム以外でも面白そうなB2Cサービスを作っている企業はたくさんある
  • 開発技術だけでなく、興味が持てる事業内容の企業を探してみる

といったことから見直してみるとよいでしょう。

こうしたアドバイスを受けて応募先を増やしたり、方向性を変えたりした結果、内定を獲得できた人は毎年たくさんいらっしゃいます。

◆自分を見直す

業務内容、勤務地、会社の規模、給与など、どれがmustな条件で、どこからはwantな条件なのか、一度書き出してみるといいでしょう。

内定ゼロの人は、こうした条件を早めにはっきりさせておく必要があります。

例えば

  • 今までは大企業にこだわりすぎていたけど、業務内容が希望に合っていれば企業規模は関係ないかも…
  • 地元での就職を考えてたけど、企業数が少ないから現実的には難しいよな

といったことがわかり、自分にとって本当に必要な条件が絞れるかもしれません。

ちなみに、自分を見直す中で就活の方向性に行き詰まったときは、既に働いている年の近い先輩や、学校の就職課の人などに相談してみるといいでしょう。もちろんpaiza新卒事務局にご相談いただいてもOKです。

なお、これは人によるので一概には言えませんが、既に内定を持っている同級生に相談するのは、相談以前に相手と自分を比較して落ち込んでしまう可能性が高いため、精神衛生上あまりおすすめしません。ご両親や家族なども、親ブロックを受けたり大手信仰・地元信仰などのバイアスがかかっている場合も多いので要注意です。

◆面接対策を見直す

今まで面接をほとんど通過できなかった…という人は、面接内容を振り返りつつ対策を考えてみたほうがいいでしょう。応募数だけを増やしても、話せる内容が変わらないと、結果もあまり変わらないかと思います。

paiza新卒の面接アドバイスでは、さまざまな落選理由や悪い例、改善のためのアドバイスなどを公開しています。実際にpaiza新卒から応募をされた多くの方から「参考になった」という声をいただいています。面接に苦手意識のある方は、ぜひごらんください。

paiza新卒の面接アドバイスはこちら

■まとめ

内定を持っている友人が増えてきて、焦りを感じている人も多いと思います。ただ、内定は早く獲得できればよい仕事につけるというわけでもありませんし、なかなか選考が進まない人が劣っているなどということは絶対にありません。

面接が苦手…という方も多いかと思いますが、paiza新卒の面接アドバイスなどを通して面接でよく聞かれることを把握して、きちんと話せるように対策しておけば、通過率は絶対に上がります。

paiza新卒は、プログラミング問題を解いてランクが獲得できていれば、事前の書類選考なしで確実に企業の面接を受けられます。また、paiza新卒が応募者と企業の間に立って面接の日程調整などを行うため、わずらわしいやりとりに時間をとられず、スムーズに就活を進めていけます。

また、現時点でのスキルに自信がない方は、プログラミングを動画で学べるpaizaラーニングの動画学習でスキルアップしてからランクを上げていくこともできます。

ITエンジニアの就活準備編」では、エンジニアのキャリアや働き方がわかる「業界構造を学ぶ」、就活で使えるポートフォリオの作り方がわかる「ポートフォリオ制作」のレッスンを公開中。就活に役立つ情報が、動画を通して手軽に学べます。
www.youtube.com



 

paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック

デザイン初心者なWebエンジニア向け・デザインを学べる入門書7冊

f:id:paiza:20180604113555j:plain
Photo by John Nakamura Remy
f:id:paiza:20140916135428p:plainこんにちは、谷口です。

エンジニアの皆さん、デザイン周りのことでWebデザイナーの方と揉めた経験はありませんか?

たとえば…

  • マージンやカラーやフォントサイズなどを勝手に変えたら、デザイナーに注意された
  • うまく入らないから1px変更しただけなのに、デザイナーに怒られた

みたいな話ですね。

デザインとシステムは切り離すことができないものですが、そのぶんエンジニアとデザイナーの間では、こうした細かいトラブルがよく起こります。

「1pxぐらいいいじゃん」と思うかもしれませんが、その1pxがグリッドシステムを崩しておかしなデザインになってしまい、サイト全体の信頼性が低下してしまうようなケースもあり得ます。

多くの企業のデザイン部門では、デザインガイドラインというコーディング規約みたいなものがあります。適当にサイズを変えたり実装したりするのは、コーディング規約を破って「インデントなんかどうでもいいじゃん」「変数名なんか好きな名前でいいじゃん」と言うようなものです。

「エンジニアにデザインの知識まで求めるな!」と思われるかもしれませんが、基本的なデザインの仕組みやルールを理解しておくだけでも、デザイナーとのちょっとしたトラブルや無駄なやりとりが減って双方が楽になるのですから、知っておいて損はありません。

というわけで今回は、弊社のデザイナーやデザインを勉強中のエンジニアに聞いた、エンジニア向けのデザイン入門書を7冊ご紹介します。

デザイン初心者のエンジニアやノンデザイナーの方の参考になればと思います。

「デザインとは?」という概念がわかる書籍

ノンデザイナーズ・デザインブック

ノンデザイナーズ・デザインブック [第4版]

ノンデザイナーズ・デザインブック [第4版]

デザインについて知りたい初心者はとりあえずこれ読んどけみたいな一冊ですね。

内容としてはレイアウトの4つの基本原則(近接、整列、反復、コントラスト)、色彩、タイポグラフィを扱っていますが、実はこれだけでデザインの基本的なセオリーを習得できます。で、このセオリーが理解できると、今まで漫然と見ていたWebサービスなどのデザインにも「根拠がある」のを認識できるようになります

あと、巻頭の「ジョシュアツリーの悟り」がすばらしいので、まずは最初だけでも読んでみてください。(要約するとジョシュアツリーという特徴的な木なんて一度も見たことないと思っていたけど、実はそこらじゅうに生えていた…って話で、「知らなければそれを認知することはできない」という逸話です。)

フラットデザインの基本ルール

フラットデザインの基本ルール Webクリエイティブ&アプリの新しい考え方。

フラットデザインの基本ルール Webクリエイティブ&アプリの新しい考え方。

コンピュータ黎明期のスキューモーフィズムから、フラットデザインへ移行していった歴史的な背景や考え方の勉強になる本です。

ユーザーがコンピュータスキルを学習していった結果、操作に関する情報を付加する必要がなくなってフラットなデザインやシンプルなデザインに移行していった…という話なんですけど、「ユーザーに合わせたデザインを考える」のが一番重要であることがわかります。

なるほどデザイン〈目で見て楽しむ新しいデザインの本。〉

なるほどデザイン〈目で見て楽しむ新しいデザインの本。〉

なるほどデザイン〈目で見て楽しむ新しいデザインの本。〉

「デザインなんてセンスがないとできないんでしょ」と思っている人に、そうではなくて「デザインは理論にもとづいてできている」と教えてくれる本です。

イラストが豊富で、よいデザインと改善すべきデザインの実例を示しながら、「なぜこのデザインがいいのか・悪いのか」を、デザイナーじゃなくてもわかる文章で解説してくれます。

「実際のデザインがなにで構成されているのか」「どうやってデザインができあがっていくのか」がよくわかります。

「目で見て楽しむ~」とある通り、デザイナーじゃなくても普通に眺めているだけで楽しい本なので、「デザインとか勉強したほうがいいんだろうけど気が進まない…」という人もとりあえず手にとってみてほしいです。

融けるデザイン

融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論

融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論

デザインやUI/UXの概念を解説した本で、表面上のデザインだけでなく「誰のために、何のためにデザインするのか」といった話が書かれています。

インターフェイスの本質に触れつつ、インターフェイスデザインとは画面UIに限ったものでなく、インターネットやコンピュータをどのように人々の身体や活動に結びつけるかが重要である…といったことが順序立てて解説されています。

設計・実装寄りの書籍

「自分でデザインするわけじゃないけど、基本的なことを知っておきたい」という人は、上記のようなデザインの概念がわかる書籍だけでもいいかと思いますが、「サービスを個人開発することにしたから一人で全部作る」「スタートアップでまだデザイナーがいなくてとりあえず見られるものを作らないといけない」といった場合は、設計や実装に関する知識も必要になってきますよね。そんな場合におすすめの書籍も紹介しておきます。

Atomic Design

Atomic Design ~堅牢で使いやすいUIを効率良く設計する

Atomic Design ~堅牢で使いやすいUIを効率良く設計する

アトミックデザインは、スケールしやすくメンテナンスしやすいUI開発手法のことです。(小さなレゴブロックを使って大きなものを作るように、小さな部品を組み合わせてページをデザインしていきましょう…という考え方の手法になります)

この書籍は、そんな感じでUIを小さなコンポーネント(部品)に分割し、それを組み合わせることでより大きなコンポーネントを作成したり、コンポーネントをレイアウトしてページを作成したりするデザイン・フレームワークについて書かれています。

かつては画面イメージからトップダウンにUI設計をする(ワイヤーフレームでレイアウトを決めてから細かいUIを作り込んだりする)のが一般的でしたが、Atomic Designでは、まずUIコンポーネントを作り、それを配置してページを作成するボトムアップな作り方をする…といった発想の転換をしています。(最近のWebの設計・開発手法はコンポーネント化を重要視する流れにあるので、将来的にはこれが自然な考えになるかもしれませんが…)

レスポンシブWebデザイン

レスポンシブWebデザイン マルチデバイス時代のコンセプトとテクニック (WEB PROFESSIONAL)

レスポンシブWebデザイン マルチデバイス時代のコンセプトとテクニック (WEB PROFESSIONAL)

レスポンシブデザインの基本が網羅されています。

レスポンシブデザインに対する考え方と実装方法がバランスよく書かれているので、レスポンシブデザイン入門者におすすめできる一冊です。

ただ若干古く、最近の開発手法には合っていない部分もあるかもしれない(全部自前で実装するのではなく、CSSフレームワークを使ったりする部分があるので…)ので、その辺は注意ですが、それでも「レスポンシブデザインがどんなロジックをもとに実現されているのか」という基本的なことを学べるいい書籍です。

完全に実装に関する書籍

これ以降はデザインを実装するのに必要な技術に関する書籍で「どうデザインするか」みたいな書籍ではないのですが、アクセシビリティは気をつけたいし、HTMLに落とし込むときはセマンティックに書けたほうがいいので紹介しておきます。

インクルーシブHTML+CSS & JavaScript

インクルーシブHTML+CSS & JavaScript 多様なユーザーニーズに応えるフロントエンドデザインパターン

インクルーシブHTML+CSS & JavaScript 多様なユーザーニーズに応えるフロントエンドデザインパターン

  • 作者: Heydon Pickering,太田良典,伊原力也,株式会社Bスプラウト
  • 出版社/メーカー: ボーンデジタル
  • 発売日: 2017/11/04
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
インクルーシブデザインに関する書籍です。インクルーシブデザインはWebアクセシビリティの一種で、たとえば小さい文字が見えない高齢者や目が見えない障害者の人も利用できるようにデザインするには…みたいな手法になります。多様なユーザー、多様なデバイスに対応できるようにデザインをしよう…という話ですね。

「見た目の美しさ」だけがデザインの範囲ではなく、ユーザーとWebシステムをコミュニケーションさせるためにWebデザインがあるのであって、スマホユーザーやスクリーンリーダーなどにもやさしいデザインを目指すべきであり、それを実現できるHTML・CSSやJavaScriptのデザインパターンとはどんなものなのか…ということが学べる書籍です。

6章の「ナビゲーション領域の設計方法」は一読の価値があるので、興味がわいた方はそこだけでも読んでみてください。

HTML5 スタンダード・デザインガイド

HTML5 スタンダード・デザインガイド ~Webサイト制作者のためのビジュアル・リファレンス&セマンティクスによるコンテンツデザインガイド~ (Web Designing BOOKS)

HTML5 スタンダード・デザインガイド ~Webサイト制作者のためのビジュアル・リファレンス&セマンティクスによるコンテンツデザインガイド~ (Web Designing BOOKS)

  • 作者: エ・ビスコム・テック・ラボ
  • 出版社/メーカー: マイナビ
  • 発売日: 2013/02/14
  • メディア: 単行本(ソフトカバー)
  • クリック: 1回
  • この商品を含むブログを見る
HTML5のリファレンス本です。

HTMLって、書こうと思えばどうとでも書けちゃう言語ですが、せめてセマンティックに書けるように仕様は理解しといたほうがいいですよね。この書籍はセマンティックな理解を深めるのに役立ちます。

ただ、2013年に出た書籍なので、現在はいくらかHTMLの仕様が変わっていたり、ブラウザの対応状況が異なっていたりする部分があるかもしれません。そのあたりだけ注意してください。

HTML/CSS入門JavaScript入門も!動画で学べるpaizaラーニング


動画でプログラミングが学べるpaizaラーニングでは、HTML/CSS入門編JavaScript入門編などのWebデザインに役立つ入門レッスンを公開しております。

もちろんPython、Java、C言語、C#、PHP、Ruby、SQLなど人気のプログラミング言語のレッスンも多数ありますので、ぜひごらんください。

まとめ

エンジニアの中には「自分にデザインセンスはないから」と思い込んでいる人も多いですが、こうしたデザイン関連の書籍を読むと、デザインはセンスで作られているのではなく、一定のセオリーがあることがわかります。

こうしたセオリーを少しでも知っておけば、自分で何かツールやサービスを開発したくなったときにも活かせますし、業務で管理画面などを作ることになったときも使いにくい画面構成を回避できます。

プログラミングで「動けばOKではなく、よいコードを書く」のが求められるように、Web開発に関わるのであれば「よいWebデザインのセオリー」も少しは知っておくと、何かとスムーズに進められるかと思います。



 
paizaラーニングでは、Python、Java、C#、Ruby、C言語、PHP、SQL、JavaScript、HTML/CSSなど、人気言語の動画レッスンを公開しています。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック

Rubyっぽいコードが爆速で動く!?CrystalとRubyを比較してみた

f:id:paiza:20180601114111p:plain
(English article is here)

f:id:paiza:20151217152725j:plainこんにちは、吉岡(@)です。

皆さんは、Crystalというプログラミング言語を知っていますか?

Rubyは、綺麗な構文のオブジェクト指向言語で、シンプルで短く素直なコードを書きやすいのが魅力ですが、速度は高速なわけではありません。

速度を求めるならC言語、Rust, Go言語といったコンパイル言語が強いですが、これらの言語はどうしてもコードの記述量が多くなったり、複雑になったりしがちです。

そこで、Rubyとコンパイル言語のいいところ取りをした言語がCrystalです。

Crystalは、Rubyに近い文法にもかかわらずコンパイルでき、コンパイル言語並みの速度で実行できます。

最近話題になっているので、名前ぐらいは知っている方も多いかと思いますが、実際に使った経験がある方は少ないのではないでしょうか?

新しい言語は、情報を読むだけではなく実際に手を動かして使ってみることで、より理解を深められます。…と言っても、ちょっと一つの言語を触ってみるために開発環境などをすべて用意するのは面倒ですよね。

CrystalはまだWindowsには対応していませんし、手順通りにインストールしたつもりでも、OSやバージョン、ほかのソフトウェアなど、さまざまな原因でエラーが出たりして失敗することもあります。

そこで、今回はブラウザだけでCrystalを使ったWeb開発ができるPaizaCloud Cloud IDEを使ってみます。

PaizaCloudは自由度が高く、さまざまなフレームワークや言語を使ったWeb開発が、初心者でも簡単にできますので、最短でCrystalを使った開発が始められます。開発環境がクラウド上で動作しているので、自分でサーバなどを用意しなくても、作ったWebサービスをその場で公開することも可能です!

今回は、CrystalとRubyで、簡単な計算をするプログラムと、基本的なWebアプリを作って動かします。また、CrystalとRubyでの速度の比較もしてみます。

手順に沿って進めれば、5分程度で試せると思いますのでぜひ挑戦してみてください。

PaizaCloud Cloud IDEを使う

それでは、始めていきましょう。

PaizaCloud Cloud IDEのサイトはこちらです。

https://paiza.cloud/

メールアドレスなどを入力して登録すると、登録確認メールが送られてきます。GitHubやGoogle(Gmail)ログインを利用すると、ボタン一つで登録することもできます。

サーバを作る

開発環境となるサーバを作りましょう。

f:id:paiza:20171213234155p:plain

「新規サーバ作成」ボタンを押して、サーバ作成画面を開きます。

インストール時にMySQLが動作している必要がありますので、MySQLをクリックして「新規サーバ作成」ボタンを押します。

f:id:paiza:20180228111202p:plain

3秒程度で開発環境がブラウザ上にできあがります。

f:id:paiza:20180228120822p:plain

Crystalのインストール

作成したPaizaCloud上のサーバに、最新のCrystalをインストールしてみましょう。

PaizaCloudでは、ブラウザ上でコマンドを入力するための「ターミナル」を使うことができます。

画面左側の「ターミナル」のボタンをクリックしましょう。

f:id:paiza:20171213234317p:plain

まず、Crystalのパッケージインストール時にはMySQLが動作している必要があるので、以下のコマンドで起動しておきます。

$ sudo systemctl enable mysql
$ sudo systemctl start mysql

続いて、Crystalのパッケージをインストールします。

$ curl https://dist.crystal-lang.org/apt/setup.sh | sudo bash
$ sudo apt-get install crystal

以上で準備ができました!

Crystalを使ってみる

まず、文字を表示してみましょう。まず、"hello.cr"という名前のファイルを作成しましょう。Crystalのプログラムは、通常".cr"という拡張子を使います。

PaizaCloudの左側の「新規ファイル」ボタンをクリックするか、ファイル管理ビューの右クリックメニューから"新規ファイル"を選択します。

f:id:paiza:20171218232330p:plain

ファイル作成ダイアログが表示されるので、"hello.cr"と名前を入れて「作成」ボタンを押します。

f:id:paiza:20180601112055p:plain

"hello.cr"ファイルが開きますので、以下のようにCrystalのコードを書きましょう。Crystalの文法はほぼRubyと同じですから、Rubyに近い感覚でコーディングできます。

hello.cr:

puts "Hello world!"

f:id:paiza:20180601112352p:plain

編集できたら、「保存」ボタンまたはCtrl-S(Command-S)で保存します。

作成したプログラムを実行するには、crystalコマンドを使います。

$ crystal hello.cr

f:id:paiza:20180601112508p:plain

"Hello world!"と表示され、Crystalでプログラムが正常に実行できました!

Crystalでは、このように直接プログラムを実行できますが、"crystal build ファイル名 --release"で一度コンパイルして、実行ファイルを作成してから実行することもできます。

"--release"オプションを付けないと最適化がされず、「高速に動作する」というCrystalの利点が活かせませんので、忘れずに付けておきましょう。

$ crystal build hello.cr --release
$ ./hello

f:id:paiza:20180601112607p:plain

CrystalとRubyで円周率を計算してみる

次に、CrystalとRubyで円周率を計算して、計算速度やメモリ使用量を比べてみましょう。

以下のようなプログラムを作成してみます。

pi.cr:

def pi(n)
  count = 0
  n.times do
    x=rand; y=rand
    if x*x + y*y < 1
      count += 1
    end
  end
  return count.to_f / (n/4)
end

puts pi(10000000)

今回は、モンテカルロ法で計算してみます。

モンテカルロ法では、1x1の正方形の中にランダムに点を作り、円の中に入る点の数を数えます。ランダムな点の数を増やせば増やすほど計算精度が上がります。今回は、1000万個の点を作ってみましょう。

このコードはRubyのコードで、RubyでもCrystalでも動作します。

まずはRubyで実行してみましょう。

~$ time ruby pi.cr
3.1417268

real    0m2.553s
user    0m2.491s
sys     0m0.059s

円周率が表示されました。約2.6秒かかっていますね。

次に、Crystalで実行してみましょう。まずはコンパイルします。

$ crystal build pi.cr --release

実行ファイル"pi"が作成されました。

それでは実行してみましょう。

$ time ./pi
3.1423996

real    0m0.265s
user    0m0.262s
sys     0m0.002s

同じく円周率が計算できましたが、今度はわずか0.27秒で、約10倍速くなっています!すごいですね!

メモリ使用量も比べてみましょう。

まずはRubyです。

$ /usr/bin/time -v ruby pi.cr 
...
        Maximum resident set size (kbytes): 8984
...

約8MBのメモリを利用していますね。

今度はCrystalです。

$ /usr/bin/time -v ./pi
...
        Maximum resident set size (kbytes): 2820
...

わずか2.8MBと、Rubyの30%ほどのメモリで動作しています!

CrystalとRubyでWebサービスを動かしてみる

次に、簡単なWebサービスを作って動かして、性能を比べてみましょう。

まずは、RubyのシンプルなWebアプリケーションフレームSinatraを使って、Webサービスを作って動かします。

以下のような"Hello Sinatra!"と表示するサービスを作成します。

sinatra_app.rb:

require 'sinatra'

get '/' do
  'Hello Sinatra!'
end

動かしてみましょう。ターミナルから"ruby sinatra_app.rb"と実行します。

$ ruby sinatra_app.rb

SinatraのWebサーバが動作しました。Sinatraはデフォルトで4567番ポートでサーバが動作します。

サーバが動作すると、PaizaCloudの画面左に、"4567"と書かれたブラウザアイコンが表示されます。

アイコンをクリックすると、PaizaCloud上でブラウザが起動します。

ここでは、Sinatraのプログラムが作成した"Hello Sinatra!"とメッセージが表示されました。

次に、Crystalで動作する、Sinatra風のWebアプリケーションフレームワークKemalでWebサービスを作成します。

まずは、Crystalのプロジェクト"crystal init app アプリケーション名"で作成します。

$ crystal init app crystal_app

crystal_appというディレクトリが作成されました。このディレクトリの中に、shard.ymlというファイルが作成されます。

CrystalではRubyのgemのようなパッケージ管理ツールshardが利用できます。ここでは、karmaパッケージを利用するので、shard.ymlファイルにパッケージを記述しましょう。

crystal_app/shard.yml:

dependencies:
  kemal:
    github: kemalcr/kemal

そして、"shards install"コマンドでパッケージをインストールします。

$ cd crystal_app
$ shards install

"src/crystal_app.cr"というファイルが作成されていますから、以下のように変更して、"Hello Crystal!"というメッセージを表示するWebサービスを作成します。

crystal_app/src/crystal_app.cr:

require "kemal"

get "/" do
  "Hello Crystal!"
end

Kemal.run

コード自体は、Sinatraで作ったときとほとんど同じですね。

それでは、コンパイルして実行してみましょう。

$ cd ~/crystal_app
$ crystal build src/crystal_app.cr --release
$ ./crystal_app

CrystalのWebサーバが動作しました!

Crystalはデフォルトで3000番ポートでサーバが動作します。

サーバが動作すると、PaizaCloudの画面左に、"3000"と書かれたブラウザアイコンが表示されます。

アイコンをクリックすると、PaizaCloud上でブラウザが起動します。

ここでは、Crystalのプログラムが作成した"Hello Crystal!"とメッセージが表示されました。

それでは、作成したRuby(Sinatra)と、Crystal(Kemal)の性能を比べてみましょう。

性能比較には"ab"コマンドを使ってみます。

まずはRuby(sinatra)の性能を測ります。

以下のコマンドでは、KeepAliveを有効にして10並列で3000リクエストを送っています。

$ time ab -k -c 10 -n 3000 http://127.0.0.1:4567/
...
real    0m1.583s
...

約1.6秒かかっています。

次に、Crystal(Kemal)の性能を測ります。

$ time ab -k -c 10 -n 3000 http://127.0.0.1:3000/
...
real    0m0.362s
...

わずか0.36秒ということで、Ruby(Sinatra)より4倍以上速くなっていますね!

メモリ使用量も比べてみましょう。 Ruby(Sinatra)とCrystal(Kemal)を/usr/bin/time -vコマンドで起動し、先ほどのabコマンドを実行したあとCtrl-Cで終了し、メモリ使用量を見てみましょう。

まずはRuby(Sinatra)です。

$ /usr/bin/time -v ruby sinatra_app.rb
...
Ctrl-C
...
        Maximum resident set size (kbytes): 22128
...

約22MBですね。

次にCrystal(Kemal)です。

$ /usr/bin/time -v ./crystal_app
...
        Maximum resident set size (kbytes): 6992
...

わずか約7MBで、1/3程度のメモリ使用量となっています!

まとめ

というわけで、CrystalとRubyを使った円周率測定とWebサービスをPaizaCloud上で作成し、比較してみました。

円周率測定ではCrystalの方が10倍程度、Webサービスでも4倍程度速くなっていましたね。両方ともメモリ使用量も1/3以下になっていたので、Crystalが非常に高速かつ軽量に動作することがわかりました。高速に動くコードを簡潔に書きたい場合などに適しているかと思います。

また、今回はPaizaCloudを使って、開発環境などを用意しなくても簡単に試すことができました。Crystalのような新しいプログラミング言語は、実際に使ってみてわかることや学べることも多いので、ぜひいろいろ試してみてください。


PaizaCloud」は、環境構築に悩まされることなく、ブラウザだけで簡単にウェブサービスやサーバアプリケーションの開発や公開ができます。 https://paiza.cloud


paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

paizaのスキルチェック





※このブログで紹介しているキャンペーンやイベント、およびサイト内の情報については、すべて記事公開時の情報となります。閲覧されたタイミングによっては状況が変わっている場合もございますのでご了承ください。

ITプログラマー・エンジニア転職・就活・学習のpaiza

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編

エンジニアのためのプログラミング転職サイト|paiza転職

プログラミング スキルチェックエンジニア求人一覧

未経験からエンジニアを目指す人の転職サイト|EN:TRY

プログラミング スキルチェックエンジニア未経験可求人一覧

エンジニアを目指す学生の就活サイト|paiza新卒

プログラミング スキルチェックエンジニア求人一覧

ブラウザを開くだけで エディタ、Webサーバ、DB等の開発環境が整う|PaizaCloud