SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

翔泳社では、「独習」「徹底入門」「スラスラわかる」「絵で見てわかる」「一年生」などの人気シリーズをはじめ、言語や開発手法、最新技術を解説した書籍を多数手がけています。プロジェクトマネジメントやチームビルティングといった管理職向けの書籍も豊富です。

ITエンジニアとしてのスキルアップ・リスキリングに、ぜひお役立てください。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659429002935-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659429002935-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659429002935-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659429002935-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659429002935-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
特集記事

私がScalaを選んだ理由

JavaとRubyとScalaの比較

ダウンロード サンプルファイル (1.0 KB)

最近自分の中でScalaという言語が熱い。RubyやPython等のスクリプト言語や、JavaやC#等現在のエンタープライズ領域を支える言語、HaskellやErlangといった関数型言語もある。そんなにいっぱいいい言語がある中で,なぜ今Scalaなんだろう? そんな理由を解説してみたいと思います。

はじめに

 最近自分の中でScalaという言語が熱い。RubyやPython等のスクリプト言語や、JavaやC#等現在のエンタープライズ領域を支える言語、HaskellやErlangといった関数型言語もある。そんなにいっぱいいい言語がある中で、なぜ今Scalaなんだろう? そんな理由を解説してみたいと思います。

Rubyの生産性

 ここ数年LLブームで、とりわけ日本でのRuby人気は目覚ましいものがあります。実は筆者もRubyはとてもお気に入りです。最初に触り始めた頃は、「Rubyはいいよ」という話だったので勉強がてら小さなサンプルを作って遊んでいたのですが、その頃は「楽しいな」「気持ちいい言語だな」という程度であまり熱心にやっていませんでした。なぜなら私は「仕事で使える」ということを非常に重視するタイプだからです。

 その認識が一変したのがRubyによるWebアプリケーション開発のプラットフォームであるRuby on Railsを触り始めて、そのアーキテクチャの凄さと楽ちんさを体感してからです。

 生産性がJavaのWebアプリケーション場合と比べて「10倍」と宣伝されており、私は「どうせ自動生成やろ。眉つばもええところや」と思っていました。

 しかし、実際に触ってみると確かに10倍かどうかは怪しいかもしれませんが、少なくともJavaの一般的なWebアプリケーション構築する時に比べて、圧倒的に生産性がいいのは間違いないと思いました。しかも生産性がいい理由は一見自動生成に見えますが、そうでなはいのです。

 その理由は、「言語のパワー」でした。Ruby on RailsはJavaCoCの思想ももちろん生産性に大きく寄与していますが、JavaやC#では絶対にあり得ないことがRubyではいとも簡単にできてしまいます。例えばRuby on Railsで「社員」のメンテナンスに関するモデル部分は下記のコードだけで済んでしまいます。

class Employee < ActiveRecord::Base
end

 たったこれだけで、例えば、社員(Employee)の登録なら、

employee = Employee.new
employee.name = "山田"
employee.salary = 500
employee.save

 とすると、データベースのemployees表にSQLが発行されてデータースにname="山田"、salary=500というデータが保存されます。社員表に存在する項目名すらコーディングしていません。確かにこれはすごい生産性です。

 さらに、給料が500円の人のリストを得るには、

employees = Employee.find_by_salary(500)

 でOKです。フレームワークを作った人には、最初からEmployeeクラスにsalaryという項目があるかなんて分かるはずがありません。

動的言語と静的言語

 これは、Rubyの持つ「動的な言語」としての性質だったり、強力なメタプログラミングの性質によるものです。Rubyではクラスやオブジェクトに対して、フレームワークが後付けで属性を追加したり、メソッドを追加したりすることができます。

 例えば先のfind_by_salary(500)では、Rubyのクラスを実行すると、メソッドが見つからない場合はmethod_missingというメソッドが呼ばれます(この例ではスーパークラスの中に書いてあります)。このmethod_missingの中で、今呼ばれたメソッドは「find_by_salaryで引数は500」というのを判断できます。

 この情報と自分のクラス名(Employee)を複数型に変換して、salary=500という条件をつけてSQLを組み立てて発行すればそれでOKという感じだと思います(実際にActiveRecordがそうなのかは知りませんが、少なくともRubyの文法では上記のようなことが可能です)。

 こういったことはJavaやC#といった「静的型付けの言語」ではできません。こういう「魔術」のようなことが使えるため、RubyやPythonといった「動的型付けの言語」は「静的型付けの言語」に比べて圧倒的に簡潔に、人間の感覚からしても自然な記述でプログラムを書くことができるようになります。

 余談ですが、筆者の同僚でSmalltalkで仕事をしていた人がいるのですが、彼は、

JavaがSmalltalkの後に出てきて、それを仕事にしたとき「退化した」と思った

 と言っていました。Smalltalkは動的型付けの言語ですが、Javaはこのような柔軟性が無く、たくさんのコードを書かなくてはいけません。最近はJavaでも簡潔にかけるフレームワークが多くでていますが、もともとある「言語のパワー」は動的な言語と比較するとやはり弱いと思います。

 その他のメリットとしては、余分な事をコーディングしなくてもいいので、コードの「本質部分」だけを記述すればいい感覚で、初心者にもとても優しくなります。

 以前、筆者はプログラムの経験があまりない人に、JavaのWebプログラミングの本を渡して「サンプルを作ってみて」と言い、2週間後に「どうだった?」と聞いてみると「難しくて歯がたちませんでした」と言われたことがありますが、Ruby on Railsの本を渡すと1時間も立たないうちに、最初のWEB-DBプログラムをコーディングして動かしていました。

 自分でプログラムを作る時もRubyの「楽ちんさ」に慣れてしまうと、JavaやC#は素晴らしいIDEのサポートがあるのにもかかわらず、どうしても「JavaやC#は面倒くさいし、時間がむっちゃかかる」という感覚に今はなっています。ちょうど、Javaに慣れた後にC++を触ったときに「めんどくさい」と思った感覚に似ています。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます
  • ・翔泳社の本が買える!
    500円分のポイントをプレゼント

メールバックナンバー

次のページ
エンタープライズアプリでRubyを使えるケースはまだ少ない

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

牛尾 剛(ウシオ ツヨシ)

株式会社豆蔵 BS事業部 エンタープライズチーム。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2464 2008/05/16 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  3. 3
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  4. 4
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  5. 5
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  1. 6
    Google Chat、Geminiによるメッセージ編集機能で新たに8言語を追加 NEW
  2. 7
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  3. 8
    Amazon Bedrockが高度なプロンプト最適化・移行ツールを発表 NEW
  4. 9
    Cursor、クラウドエージェント向けに新しい開発環境設定ツールを発表 NEW
  5. 10
    Visual Studio Code 1.119公開、エージェントと統合ブラウザの連携が可能に

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  3. 3
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  4. 4
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  5. 5
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  6. 6
    Google Chat、Geminiによるメッセージ編集機能で新たに8言語を追加 NEW
  7. 7
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  8. 8
    Amazon Bedrockが高度なプロンプト最適化・移行ツールを発表 NEW
  9. 9
    Cursor、クラウドエージェント向けに新しい開発環境設定ツールを発表 NEW
  10. 10
    Visual Studio Code 1.119公開、エージェントと統合ブラウザの連携が可能に
  1. 1
    Google、4月に発表したGeminiアプリの新機能をまとめて紹介
  2. 2
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  3. 3
    Googleが「Gemini Embedding 2」を一般公開、マルチモーダル対応
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    「分割代入」 ~マンガでプログラミング用語解説
  6. 6
    Google、エージェント構築を実践的に学習できる無料コースを6月に開催
  7. 7
    95%が失敗する生成AIプロジェクト──成功のカギは「メモリエンジニアリング」にあり
  8. 8
    ChromeでGeminiのプロンプトをツール化する「skills」機能が提供開始
  9. 9
    高額の技術書がKindleで50%オフのお得なセール 翔泳社の本を対象に5/14まで
  10. 10
    OpenAI「Codex」週間300万ユーザー突破——「ハーネスエンジニアリング」が示すAIコーディング最前線

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  3. 3
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  4. 4
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  5. 5
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  1. 6
    Google Chat、Geminiによるメッセージ編集機能で新たに8言語を追加 NEW
  2. 7
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  3. 8
    Amazon Bedrockが高度なプロンプト最適化・移行ツールを発表 NEW
  4. 9
    Cursor、クラウドエージェント向けに新しい開発環境設定ツールを発表 NEW
  5. 10
    Visual Studio Code 1.119公開、エージェントと統合ブラウザの連携が可能に

アクセスランキング

  1. 1
    OpenAI、「GPT-5.5」をリリース
  2. 2
    国内最大級の転職サイト「doda」は、15年以上稼働するシステムの技術的負債をどう乗り越えたのか?
  3. 3
    Skillsの日本語専用データベース「Agent Skills by ALSEL」が公開 NEW
  4. 4
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  5. 5
    AMDのGPUプログラミング基盤「ROCm」とは何か──100%オープンソースで挑むソフトウェアスタックの現在地
  6. 6
    Google Chat、Geminiによるメッセージ編集機能で新たに8言語を追加 NEW
  7. 7
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  8. 8
    Amazon Bedrockが高度なプロンプト最適化・移行ツールを発表 NEW
  9. 9
    Cursor、クラウドエージェント向けに新しい開発環境設定ツールを発表 NEW
  10. 10
    Visual Studio Code 1.119公開、エージェントと統合ブラウザの連携が可能に
  1. 1
    Google、4月に発表したGeminiアプリの新機能をまとめて紹介
  2. 2
    仕様駆動開発への期待と誤解 ~「仕様」とは、結局何なのか~
  3. 3
    Googleが「Gemini Embedding 2」を一般公開、マルチモーダル対応
  4. 4
    シニアでも第一線で活躍できるワケ──AWSのDeveloperスペシャリスト福井厚氏が明かす「失敗から学ぶことが良い経験になる」
  5. 5
    「分割代入」 ~マンガでプログラミング用語解説
  6. 6
    Google、エージェント構築を実践的に学習できる無料コースを6月に開催
  7. 7
    95%が失敗する生成AIプロジェクト──成功のカギは「メモリエンジニアリング」にあり
  8. 8
    ChromeでGeminiのプロンプトをツール化する「skills」機能が提供開始
  9. 9
    高額の技術書がKindleで50%オフのお得なセール 翔泳社の本を対象に5/14まで
  10. 10
    OpenAI「Codex」週間300万ユーザー突破——「ハーネスエンジニアリング」が示すAIコーディング最前線