お役立ちコンテンツ | フリーランスエンジニアの案件・求人なら【テクフリ】

お役立ちコンテンツ

フリーランスの抱える税金や確定申告、社会保険や経費に関するお悩みを解決いたします。そもそもフリーランスになるためにはどうすればよいのか、現在正社員で働いているが、フリーランスになりたいと考えている方々にも必見です。役立つコンテンツ満載でお届けいたします。

該当コンテンツ数222件中193~204件を表示
Swift

【Swift】RKNotificationHubを使ってみた

今日は以前、アプリ開発の中で使用したRKNotificationHubの使い方を書いていこうと思います! 公式ものはObjective-CだったのでSwift版です! 公式を見たい方はこちら↓(アニメーションなどが視覚的に理解できるので、1度見てみましょう!) https://github.com/cwRichardKim/RKNotificationHub インストール 何はともあれ、まずはインストール! 自分は、Cocoapodsで管理しているので、管理しているプロジェクトのpodfileに以下を入力する pod ‘RKNotificationHub’ コード全体 そしてインストールしたら、プロジェクトを開いて、使用したいViewControllerで書き込んでいくのですが、 一回コードを全文記載して、その後詳細を説明していこうと思います! // HogeVC.swift import UIKit import RKNotificationHub class HogeVC: UIViewController { // RKNotificationHubのインスタンスを生成 let hub = RKNotificationHub() // バッジをつけたいボタン @IBOutlet weak var hogeButton: UIButton! override func viewDidLoad() { super.viewDidLoad() // hubをhogeButtonに設置し、最初に表示させるバッジのCountを3にする hub.setView(hogeButton, andCount: 3) // 設置するhubの背景色を黒に文字色を白にする hub.setCircleColor(UIColor.blackColor(), labelColor: UIColor.whiteColor()) } @IBAction func touchHogeButton(sender: AnyObject) { // hubのカウント数を1減らす hub.decrement() // hubのアニメーション hub.pop() if hub.count == 0 { // hubのカウントが0になったらボタンを押せなくする self.hogeButton.enable = falses } } } 使い方 まずは、RKNotificationHubをインポートします。 その後、RKNotificationHubのインスタンスとバッジをつけたいボタンの宣言をしています。 // HogeVC.swift import UIKit import RKNotificationHub class HogeVC: UIViewController { let hub = RKNotificationHub() @IBOutlet weak var hogeButton: UIButton! override func viewDidLoad { } @IBAction func touchHogeButton(sender: AnyObject) { } } 宣言をしたら、自分の使いたい様にバッジをカスタムしていきます! ここが一番楽しいときです(笑) // HogeVC.swift import UIKit import RKNotificationHub class HogeVC: UIViewController { let hub = RKNotificationHub() @IBOutlet weak var hogeButton: UIButton! override func viewDidLoad { hub.setView(hogeButton, andCount: 3) hub.setCircleColor(UIColor.blackColor(), labelColor: UIColor.whiteColor()) } @IBAction func touchHogeButton(sender: AnyObject) { hub.decrement() hub.pop() if hub.count == 0 { self.hogeButton.enable = falses } } } ここでは、viewDidLoadでバッジを表示させるhubの初期設定をしています。 setViewで表示させたいViewとバッジの初期値の設定 setCircleColorで背景色と文字色の設定をしています。 試したことが、ないのですが、フォントも変えられるようです! また、hogeボタンを押したときにもメソッドを宣言しています! hub.decrementでバッジの数を減らし、popするアニメーションを指定しいます。 更にhubのCountが0になったらボタンを使えなくしてみました! さらにさらに、 ざっくりと簡単な使い方を書いたのですが、他にも詳細な設定をすることが出来ます! 調整メソッド hub.setView(view, andCount: 3) // 設置するViewと初期値を設定 hub.setCircleAtFrame(frame) // hubのサークルフレームを設定 hub.setCircleColor(circleColor, labelColor) // hubの背景色、文字色を設定 hub.moveCircleByX(x, y: y) // hubの位置を調整出来る(デフォルトは右上) hub.scaleCircleSizeBy(scale) // サークルを拡大・縮小出来る Countの変更 hub.increment // Countを1ずつ増やす hub.incrementBy(10) // Countを10ずつ増やす hub.decrement // Countを1ずつ減らす hub.decrementBy(10) // Countを10ずつ減らす hub.hideCount // Countを隠す hub.showCount // Countを表示させる バッジのアニメーション hub.pop() hub.blink() hub.bump() こんな感じで、自分が使いたいようにカスタムすることが出来ます! Xcodeのデフォルトでは、TabBarItemにしかバッジを表示することができなかったので、 すごく良かったです! ライブラリは、導入しても使い方を理解するまでが大変で、構造を理解しないと後々大変になることが大半なのですが、 このライブラリはシンプルで使いやすく、かっこいいバッジを設置することが出来たので良かったです! よかったら、使ってみてはいかがですか? おしまい
C#

C# の将来性 現状から踏まえ検証してみる

この記事の読者の方には、未経験からエンジニアを目指しているという方や、既にエンジニアとして働いているけれど、違うプログラミング言語を学び、職種を変えてエンジニアとしてチャレンジしようか悩んでいるという方が多いと思います。 一概にエンジニアといっても、ユーザーが触れる部分を設計・開発するフロントエンドエンジニアや、システムの裏側にあるロジックを設計・開発するバックエンドエンジニア、開発したシステムを正常に動かすための環境づくりをするインフラエンジニア、システムの運用や保守をサポートするカスタマーサポートなど、エンジニア内で様々な職種があります。 というのも、システムの開発にあたっては、ユーザーが使う画面やユーザーが画面上で行った行動に対する処理などシステム全体を動かすために、それぞれのシステムが複合的に絡み合っており、またシステムの機能を維持するためのメンテンスが必要になるため、このようにエンジニアの中でも職種が分かれています。 その職種の中でも、年収に差があったり、独立のしやすさに差があるので、エンジニアとして働くにあたってどの職種で働くのかという観点は非常に重要になってきます。 そして、エンジニアとして職種を変えようと思った場合には、新たなプログラミング言語を学ぶ場合が非常に多いです。例えば、フロントエンドエンジニアとバックエンドエンジニアでは使うプログラミング言語が異なってきます。 今回はその中でもC#というプログラミング言語に重点を置いて、現状と将来性を比較していき、C#を学ぶべきか否か見ていきます。 C# とは? C#は2000年にマイクロソフト社が公開したプログラミング言語です。 C#はマルチパラダイムプログラミング言語であり、複数のスタイルを持ち合わせていますが、クラスとインスタンスで構成されているオブジェクト指向をメインのスタイルとして持った言語です。 C#と聞くとC言語やC++と似たようなプログラミング言語かなと思う方が多いと思いますが、全く別物といってよいほど異なり、C言語やC++よりも多彩なアプリケーション開発ができます。 ただ、C#の文法がC言語やC++、Javaと似ているのでこれらの文法を一通り習得している方はC#にとっつきやすいでしょう。 実際にC#によってWebアプリケーション、スマートフォン向けアプリケーション、PC向けアプリケーションなどかなり幅広い領域での開発ができます。ただし、マイクロソフト社が開発しリリースしたということもあり、Windows向けに作られているのでMacやLinuxでは開発がしづらいです。 しかし、Windowsでは非常に開発がしやすく、統合開発環境(IDE)の「Visual Studio」を使うことで開発のしやすさがグンと伸びることがC#の良さです。 C# の現状 給与から業界の動向まで検証 まず、C#を使う職場に転職した場合に「どのくらいの給与を受け取れるのか?」「そもそもどのような仕事ができるのか?」ということについてお伝えするために、給与から業界の動向について見ていきます。 C#の現状 給与は? ここでは、C#の現状の給与に関して見ていきます。給与に関しては企業によって異なり、年収500万〜800万の求人が多い印象です。C#は現在、需要があるので、年収もそこそこ高くなっています。 需要に関してですが、ITエンジニアの需要はプログラミング言語に問わず全体的に高く、その中でもプログラミング言語によって差があるというのが現状です。その中でもC#の需要は高くなっています。 需要の高さは転職に強いのかということでわかりますが、C#は転職がしやすくなっています。なぜならC#エンジニアを求めている企業が増えているおり、C#を使いこなせるエンジニアの希少価値が高くなっているからです。 どのような理由から多くの企業がC#エンジニアを求めているかということは「C#の現状 業界の動向は?」にて後述します。 もし、C#エンジニアに転職したいという場合は、C#を用いた開発経験があることがベストですが、もし無い場合は文法が似ているJavaやC++のサーバーサイド開発経験があると有利に転職を進められます。また、C#を使いこなせて要件定義や基本設計などの上流工程まで出来ると、高待遇を受けやすいです。 結論、C#エンジニアは給与の面で検証すると、C#エンジニアになることは良い選択肢であると言えそうです。 C#の現状 業界の動向は? 続いて、C#の業界の動向について見ていきます。業界の動向に関しては、C#での開発が得意としている業務アプリケーションやAndroidアプリケーション、iOSアプリケーションなどの幅広い開発がメインで行われる一方で、最近だとゲームがC#によって開発されることが多いです。 特に、VRゲームを開発するという仕事が最近増えています。そのため、C#エンジニアを求めている企業が増え、C#エンジニアの希少価値が高くなっています。 また、C#の求人案件では、自社開発の案件が多いです。そのため、インターネット・Web業界、情報処理サービス業界、ソフトウェア業界、ハードウェア業界の4つに分類することができるIT業界の中でもインターネット・Web業界での求人が多くなっています。 新しいサービスを作りたい、ゲームを作りたいという方にはC#エンジニアになることは良い選択肢であると言えそうです。 C# の将来性 給与から業界の動向まで検証 C#の現状を検証したところ、給与は良く、仕事内容も新しいサービスを作りたい、ゲームを作りたいという方には良いプログラミング言語であるとわかりました。ただ、現在が良くても将来的にどうなのかという部分がわからなければ、C#エンジニアとして仕事を続けていくことが難しいでしょう。 そこで、C#を使う職場に転職した場合に将来的に「どのくらいの給与を受け取れるのか?」「そもそもどのような仕事ができるのか?」ということを将来の予測を見ることで検証していきます。 C#の将来性 給与は? ここでは、C#の将来の給与に関して見ていきます。給与に関しては現状の年収500万〜800万の求人が多いという状況から変わらないか、更に年収が上がるということが考えられます。 理由としてはC#での開発案件は今後さらに増え、C#エンジニアの需要が増加すると考えられるからです。具体的に、どのような開発案件が増えていくのか?という点は「C#の将来性 業界の動向は?」で後述致します。 また、C#はMicroSoftが開発したOSであるWindows OSの開発に使われているプログラミング言語であり、このWindows OSは圧倒的なシェアを占めています。今後もWindows OSの開発にC#が使われていくことを考えると、C#は一定の重要を保つことがわかると思います。 こちらもC#エンジニアは給与の面で検証すると、C#エンジニアになることは良い選択肢であると言えそうです。 C#の将来性 業界の動向は? 続いて、C#の将来の業界の動向について見ていきます。将来的にはゲームの開発案件、特にVRゲームの開発案件が増え、C#の需要は更に伸びると推定されています。 そのため、更にC#エンジニアを求めている企業が増え、C#エンジニアの希少価値が高くなると予想されます。 C#は今後もインターネット・Web業界、情報処理サービス業界、ソフトウェア業界といった幅広くの業界で使われ、特にIT業界の中でもインターネット・Web業界での求人が増えていくことと予想されます。 今後、VR技術やゲーム開発の技術が更に進歩することで、C#を使ってより優れた実装ができるようになるでしょう。 まとめ C# の将来性 現状から踏まえ検証してみる というテーマで今回はお伝えしました。いかがだったでしょうか? 今回お伝えしたかったことは以下のとおりです。 現状では、C#エンジニアを求めている企業が増えているおり、C#を使いこなせるエンジニアの希少価値が高くなっているため、C#は需要があり、年収もそこそこ高いゲーム開発をするベンチャー企業やその他の大手IT企業においてC#は更に使われ、年収が高くなると予想される新しいサービスを作りたい、ゲームを作りたいという方にはC#エンジニアになることは良い選択肢であると言える C#エンジニアに興味ある方は是非今回の記事を参考に、転職を考えてみてください。 今だけ!登録で最大1,500円相当もらえるお仕事探しサービス「テクスカ」 「テクスカ」は、報酬をもらいながらお仕事探しができる新体験のスカウトサービスです。 【テクスカの4つの特徴】 1.面談するだけで、3,500円相当のAmazonギフトカードを獲得できます 2.優秀な貴方に仲間になってほしいと真に願うとっておきのスカウトが企業から届きます 3.貴方の経歴・スキルを見て正社員のオファーだけでなく副業オファーも届きます 4.転職意欲がなくとも自分のスキルが通用するか各社のCTOに評価してもらうチャンスがあります 忙しさのあまり、企業との新たな出会いを逃している… スパムのように届くスカウトメールにうんざりしている… 自分の市場価値がわからない… 社外の人からの評価が気になる… 副業の仕事が見つからない… そんなあなたにおすすめです!
Java

PlayFramework(Java)で開発環境と本番環境の違いで苦労した

今回の苦労した点は conf/内のファイルが読め込めない!! というもの。 やりたいこととしては、conf/内に何かしらのファイルを置いておいて、application.confに記述したパスを参照して、Javaで読み込むというもの。(PlayでJava?という気持ちは内にしまっておいてください。。。) 開発環境で動作させるrunやstartですと問題ないのですが、本番環境で運用する為のstageやdistをして実行すると読め込めないという状況が起きました。 まずは、 開発環境で動作したコード //application.confを読み込みにいく Config config = ConfigFactory.load(); //ファイルパスを取得 String filePath = config.getString("filePath"); //ファイルパスからFileインスタンスを生成 File file = new File(filePath); //NullPointerException このコードで実行すると、ファイルが見つかりません。 ConfigFactory.load()を利用すると、デフォルトでapplication.confを読みにいくのですが、runやstartと違ってstageやdistしたパッケージ内にはconf/が存在していないのでパスが違ってエラーになります!! ではどうしたものか・・・色々調べてみると、 ではどうしたものか・・・色々調べてみると、 便利なものが存在しました!! play.Application.getFile(String relativePath)このメソッドはアプリケーションのルートパスからの相対ファイルを取得するというもの。アプリケーションのルートパスの参照ならconf/も存在するので、ファイルも取得出来る!!それでは、 本番環境でも動作したコード //application.confを読み込みにいく Config config = ConfigFactory.load(); //ファイルパスを取得 String filePath = config.getString("filePath"); //ルートパスからファイルを取得 File file = Play.application().getFile(filePath); これでファイルを取得出来ました!!因に、application.confに記述するパスはconf/pathとなります。
Android

AndroidでRealmを使ってみた〜お気に入り機能の実装(其の一)〜

今回はAndroidアプリでReamlを利用してデータの管理をしてみようと思います。 実装したい機能は「お気に入り機能」 SQLiteは触ったことあったけど、 NoSQLであるReamlを使うのには勉強時間がかかるのではないかと心配・・・ しかし、日本語のドキュメントがありとても親切↓ https://realm.io/jp/docs/java/latest/ 更に、GitHubで「Android Realm」と検索すれば結構簡単なコードがでてくるのでこれらを拝見しながら いざ、実装!! RealmはNoSQLなのでキーと値のペアでデータを格納していきます。 最初にキーとなるModelなるクラスを作ります。 public class FavoriteModel extends RealmObject{ private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } } こんな感じで作成します。 重要なのが extends RealmObject です。 RealmのModelとして宣言して、あとはカプセル化してゲッター・セッターを書くだけ!! 続いては、データをRealmに格納する処理を書いていきましょう!! RealmConfiguration config = new RealmConfiguration.Builder(detailActivity) .name(FavoriteDataFile) //データを格納するファイル名を指定 .build(); Realm realm = Realm.getInstance(config); //Realmを使う宣言 final List<FavoriteModel> favoriteList = new ArrayList<>(); FavoriteModel favoriteModel = new FavoriteModel(); favoriteModel.setId(id); favoriteList.add(favoriteModel); //先ほどのModelに格納していく //Modelに格納したデータをRealmに格納し直す realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { realm.copyToRealm(favoriteList); } }); //Realmを終了することを忘れない realm.close(); 格納はとても簡単にできました!! 次は格納したデータを取得して表示してみたいと思います!!
CakePHP

フォームヘルパーが生成するHTMLをカスタマイズする

テンプレートの作成 新しいテンプレートを「config」ディレクトリにfileName.phpとして作成する。このfileName.phpに、適用したいコードを追加していく。fileName.phpに記載されなかったものはデフォルトで設定されているものが適用される。 サンプル <?php return [ 'inputContainer' => '{{content}}', 'label' => '', 'input' => '<input type="{{type}}" name="{{name}}"{{attrs}} class="form-control">', 'radioWrapper' => '{{input}}', ]; デフォルトで設定されているもの 'templates' => [ 'button' => '<button{{attrs}}>{{text}}</button>', 'checkbox' => ' <input type="checkbox" name="{{name}}" value="{{value}}"{{attrs}}>', 'checkboxFormGroup' => '{{label}}', 'checkboxWrapper' => '<div class="checkbox">{{label}}</div>', 'dateWidget' => ' {{year}}{{month}}{{day}} {{hour}}{{minute}}{{second}}{{meridian}}', 'error' => '<div class="error-message">{{content}}</div>', 'errorList' => '<ul>{{content}}</ul>', 'errorItem' => '<li>{{text}}</li>', 'file' => '<input type="file" name="{{name}}"{{attrs}}>', 'fieldset' => '<fieldset{{attrs}}>{{content}}</fieldset>', 'formStart' => '<form{{attrs}}>', 'formEnd' => '</form>', 'formGroup' => '{{label}}{{input}}', 'hiddenBlock' => '<div style="display:none;">{{content}}</div>', 'input' => '<input type="{{type}}" name="{{name}}"{{attrs}}/>', 'inputSubmit' => '<input type="{{type}}"{{attrs}}/>', 'inputContainer' => ' <div class="input {{type}}{{required}}"> {{content}} </div>', 'inputContainerError' => ' <div class="input {{type}}{{required}} error"> {{content}}{{error}} </div>', 'label' => '<label{{attrs}}>{{text}}</label>', 'nestingLabel' => '{{hidden}}<label{{attrs}}>{{input}}{{text}}</label>', 'legend' => '<legend>{{text}}</legend>', 'multicheckboxTitle' => '<legend>{{text}}</legend>', 'multicheckboxWrapper' => '<fieldset{{attrs}}>{{content}}</fieldset>', 'option' => '<option value="{{value}}"{{attrs}}>{{text}}</option>', 'optgroup' => ' <optgroup label="{{label}}"{{attrs}}> {{content}} </optgroup>', 'select' => '<select name="{{name}}"{{attrs}}>{{content}}</select>', 'selectMultiple' => ' <select name="{{name}}[]" multiple="multiple"{{attrs}}> {{content}} </select>', 'radio' => ' <input type="radio" name="{{name}}" value="{{value}}"{{attrs}}>', 'radioWrapper' => '{{label}}', 'textarea' => ' <textarea name="{{name}}"{{attrs}}> {{value}} </textarea>', 'submitContainer' => '<div class="submit">{{content}}</div>', ] テンプレートの適用 App/View/AppViewに、以下のコードを記述する。 class AppView extends View { public function initialize() { $this->loadHelper('Form', [ 'templates' => 'fileName', ]); } } これを記述することで、イニシャライズされて、システム全体で自分が作成した新しいテンプレートが適用される。 部分的に適用させる フォームヘルパーを使用するところで、それぞれ適用させたいものを記載する。 サンプル <?php echo $this->Form->input('name', [ 'templates' => [ 'inputContainer' => '<div class="form-control">{{content}}</div>' ] ]); ?> それぞれのフォームヘルパーに記載しないといけないが、特定の場所の特定のタグにのみカスタマイズしたタグを生成することができる。
CakePHP

CakePHPのファイル構成

CakePHPの中身 アプリケーションフォルダ内は、以下のようなものが用意されている。 フォルダ名 内容 bin cakeコマンドのプログラムが収録されているフォルダ config CakePHPで利用される各種の設定情報を保管するフォルダ。設定を変更する場合はここにあるファイルを変更する。 logs ログファイルを保存するフォルダ plugins 機能追加のためのプラグインファイルを格納するフォルダ src CakePHPのソースコードファイル類を配置するフォルダ。MVCの基本的なプログラムはこの中に作成していく。 tests テストに関するフレームワークを追加するフォルダ tmp テンポラリーフォルダ。プログラム実行中に作成される一時ファイルの保管場所。 vendor ソフトウェアベンダーが用意するライブラリプログラムが保存されている。CakePHPの本体部分はここにある。 webroot CakePHPによるWebアプリケーションのルート。ここにファイルを追加すると、それがWebアプリケーションのルートに配置されたものとして呼び出されるようになる。 .htaccess, index.php このディレクトリのWebサーバーの設定情報と、デフォルトページ(ファイル名を省略したとき、指定のディレクトリでデフォルトで表示されるページ)のファイルになる。 その他、生成されているファイルはGitやComposerなどに関するファイルであるが、開発で直接編集することはあまり無いので割愛。 srcフォルダの中身 CakePHPの開発の中心となるのが、この「src」フォルダ。この中に、アプリケーションで必要となるプログラムなどのファイルを用意していく。 フォルダ名 内容 Console コンソールプログラム(コマンドとして実行できるプログラム)を配置するフォルダ Controller MVCのコントローラに相当するファイルがまとめられるフォルダ。プログラムの制御に関するソースコードを追加していく。 Model MVCのモデルに相当するファイルがまとめられるフォルダ。データベースアクセス関係のソースコードを追加していく。 Shell シェルプログラムのConsoleShell.phpが用意されている。 Template ビューで使用するテンプレートファイルをまとめておくフォルダ。アクセスした際に表示されるページの内容は、ここに配置するテンプレートファイルとして用意していく。 View MVCのビューに相当するファイルがまとめられるフォルダ。 Application.php アプリケーション全体で必要とされる処理などを記載しておくフォルダ。 webrootフォルダ 「src」とならんで重要なフォルダが「webroot」。ここには、css, js, imgなどのファイルを配置していく。
Ruby on Rails

gemとは何か 【Ruby, Ruby on Rails】

gemとは何か gemとはrubyのライブラリのことを指します。 gemの扱い方 gem list でインストール済みのgemの確認ができる $ gem list *** LOCAL GEMS *** actioncable (5.2.1, 5.2.0, 5.1.6, 5.1.4) actionmailer (5.2.1, 5.2.0, 5.1.6, 5.1.4) actionpack (5.2.1, 5.2.0, 5.1.6, 5.1.4) actionview (5.2.1, 5.2.0, 5.1.6, 5.1.4) activejob (5.2.1, 5.2.0, 5.1.6, 5.1.4) activemodel (5.2.1, 5.2.0, 5.1.6, 5.1.4) activerecord (5.2.1, 5.2.0, 5.1.6, 5.1.4) activestorage (5.2.1, 5.2.0) activesupport (5.2.1, 5.2.0, 5.1.6, 5.1.4) addressable (2.5.2) archive-zip (0.11.0) arel (9.0.0, 8.0.0) ast (2.4.0) bigdecimal (default: 1.3.4) bindex (0.5.0) bootsnap (1.3.1) builder (3.2.3) bundler (1.16.4, 1.16.3) byebug (10.0.2, 9.0.6) capybara (3.4.1) childprocess (0.9.0) chromedriver-helper (1.2.0) 〜省略〜 rails に関連するgemを探したい場合は gem search -r rails で探すことができる $ gem search -r rails *** REMOTE GEMS *** aa-rails4 (0.6.0) aaronchi-jrails (0.5.1) aavkontakte-rails3 (0.1.9) ab-experiments-rails (0.0.3) abcjs-rails (3.0.1) access-granted-rails (0.1.0) access-watch-rails (0.0.3) access_policy_rails (0.0.2) access_watch_rails (0.1.2) accessible-bootstrap3-rails (0.2.4) account_kit_rails (0.0.0) accountingjs-rails (0.0.4) ace-rails (0.0.2) ace-rails-ap (4.2) ace_editor-rails (0.0.1) ace_vimtura-rails (0.1.3) aced_rails (0.2.1) ack_favicon_maker_rails (1.0.2) ack_rails_admin_jcrop (0.2.0.2) ack_rails_admin_settings (1.2.3.3) act-fluent-logger-rails (0.5.0) 〜省略〜 なお、ブラウザで確認したい場合は下記を参照 ruby-toolbox RubyGems.org gem のインストールは gem install rails で可能だが、あまりお勧めできる方法ではない。 bundler で管理するのが常套 bundlerとは bundle inatall などで使われる bundler 。実はこれもgemの一つである。 用途はgemの管理。 gemを複数使っていると、依存関係が出てくる。 バージョンが??だの、あのgemがないだの言われる。 それをbundlerで管理する。そのファイルがGemfileである。 source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.5.3' gem 'mysql2', '>= 0.4.4', '< 0.6.0' gem 'puma', '~> 3.11' gem 'rails', '~> 5.2.2.1' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' # gem 'mini_racer', platforms: :ruby gem 'coffee-rails', '~> 4.2' gem 'jbuilder', '~> 2.5' gem 'turbolinks', '~> 5' # gem 'redis', '~> 4.0' gem 'bootsnap', '>= 1.1.0', require: false gem 'mini_magick', '~> 4.8' gem 'aws-sdk' gem 'carrierwave', '~> 1.0' gem 'config' gem 'devise' gem 'devise-i18n' gem 'draper' gem 'exception_notification' gem 'fog-aws' gem 'font-awesome-rails' gem 'gretel' gem 'kaminari' gem 'ranked-model' gem 'ransack' gem 'slack-notifier' gem 'slim-rails' gem 'yaml_vault' group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'web-console', '>= 3.3.0' gem 'better_errors' gem 'bullet' gem 'capistrano' gem 'capistrano-bundler' gem 'capistrano-rails' gem 'capistrano-rbenv' gem 'capistrano-yarn' gem 'capistrano3-puma' gem 'guard-rspec', require: false gem 'rack-mini-profiler' gem 'rails-flog', require: 'flog' gem 'simplecov', require: false end 〜省略〜 source 'https://rubygems.org' でホスティングサーバーを指定。 gem 'rails', '~> 5.2.2.1' でrails のバージョンを指定。 group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'better_errors' gem 'bullet' end 本番環境で使うgemを指定。 こんな感じでgemを記載していく。 Gemfileを書き終えたら、bundle insrall でGemfileに記載された通りにインストールする。 その際に、Gemfile.lockを作成する。 このファイルがgemのバージョンをロックしバージョンが変わらない様にしてくれる。 つまり、gemが更新されても使用するgemのバージョンはそのままにしてくれる。 Gemfile.lockを更新したいときは bundle update を使う。
Go言語

Go言語の将来性 現状から踏まえ検証してみる

Go言語とは? Go言語とは、Googleが開発しているプログラミング言語です。日本でも、注目度が高まっています。その一方で、扱えるエンジニア数が絶対的に不足しているプログラミング言語としても知られています。 なお、Go言語(Golang)は俗称で、言語としての正式名称は単なる「Go」です。しかし、今回はプログラミング言語であることを意識してもらうために、敢えてGo言語と表記することにします。 さて、話が戻して、まずはプログラミング言語としてのGo言語の特徴についてご紹介いたしましょう。 Go言語の特徴として押さえておきたいのは、次の三つです。 ①マルチパラダイムの次世代汎用言語 ②Googleのサービスと親和性が高い ③YouTubeやDockerなど大規模・複雑なWebサービス、プロダクト開発で採用されてきた 一つ目の“マルチパラダイムの次世代汎用言語”についてですが、Go言語はマルチパラダイムプログラミング言語(※)であり、様々な実装に耐えられるようになっています。 ※パラダイムとは「プログラムの動作方針」くらいに思ってください。有名なパラダイムとしては「オブジェクト指向プログラミング」や「関数型プログラミング」、「手続き型プログラミング」などがあります。 Go言語の汎用性はパラダイムだけでなく、環境についても言え、Googleが作ったOSであるandroidはもちろん、Windows、Linux、Mac、更にはiOSと、昨今の主要OSすべてで動作します。 実際、「Ivy big number calculator」というGoogleの開発チームがGo言語で作成したCUI(キャラクターユーザーインターフェース)計算機アプリが、android向けのPlayストアだけでなく、iOS機器向けのApp Storeにも公開されています。 二つ目の“Googleのサービスと親和性が高い”は当たり前と言えば、当たり前ですが、Go言語はGoogleが開発、提供しているサービスのほとんどで利用可能です。 特に注目されているのは、Googleがオープンソースで公開している機械学習ライブラリのTensorFlow(テンサーフロー)と、Googleが提供するクラウドサービスであるGoogle Cloud Platform(GCP)の二つです。 機械学習、つまりはAI開発、そしてクラウドと、なにかと注目度が高い領域でGo言語を利用できるというのは、今後のGo言語の展開を考える上でも、重要なポイントかと思います。 ちなみに、Googleの提供しているサービスでGo言語が使えないものとしては、Google App Maker(G Suiteプラットフォーム)が挙げられます。Google App MakerとはGoogle Apps(Googleカレンダーや、Gmailなど)にユーザーが独自で拡張機能を開発することができる便利なサービスです。 残念ながら、Google App Makerでは、実質専用プログラミング言語であるGoogle Apps Script(GAS)を使って開発することになります。 そして、最後の“YouTubeやDockerなど大規模・複雑なWebサービス、プロダクト開発に採用されてきた”ですが、Googleが運営する動画投稿サービスであるYouTubeのサーバーサイドや、仮想化技術の一つであるコンテナのデファクトスタンダードといえるDockerはGo言語で開発されています。 実はGo言語のプログラミング仕様として、“処理も構文もシンプルで効率的”、“並行処理で効率よくタスクを処理していく”、“プログラミング言語自身でセキュアなメモリ管理を行い、開発者が意識せずとも、効率よくリソース管理ができる”という三つの重要方針があります。 この三つの方針は、明らかに「大規模・複雑なWebサービス、プロダクトを、より効率的に実現させる」という目標から生まれたものです。そして、実際に「大規模・複雑なWebサービス、プロダクトを、より効率的に実現させられるプログラミング言語」として、採用されることが多いのです。 Go言語の現状 給与から業界の動向まで検証 次に、Go言語の現状を見ていきましょう。 今回は、求人市場の実態を知る参考値として、求人検索エンジン「スタンバイ」(株式会社ビズリーチ)に掲載された求人情報を分析した、【求人検索エンジン「スタンバイ」調べ】を利用させていただきたいと思います。 求人検索エンジン「スタンバイ」プログラミング言語別年収ランキング2018 (提示年収の中央値ベスト10) 順位 言語 年収中央値(万円) 最大提示年収(万円) 求人数(件) 1 Go 600 1,600 2,202 2 Scala 600 1,300 1,489 3 Python 575.1 1,499 9,344 4 Kotlin 575 1,200 961 5 TypeScript 575 1,200 667 6 R 574.8 1,000 220 7 Ruby 550 1,200 11,676 8 Swift 550 1,200 3,353 9 Perl 525 1,200 4,509 10 C 525 1,000 9,347 年収中央値(つまりは期待平均年収)はScalaと同率一位、最大年収は二番手のPythonと100万円近い差をつけて堂々の一位です。労働市場で圧倒的な地位を占めるプログラミング言語だということがよくわかるかと思います。 理由としては、二つ挙げられます。 一つは冒頭にも書きましたが、注目度が上がって事で企業側のニーズも高まっていますが、エンジニア数がまったく足りていません。需要と供給のバランスが崩れている状態のため、期待平均年収が高い傾向にあります。 ちなみに、どれくらいニーズが急拡大しているかというと、前回の2017年度版ランキング作成時は、「求人数が100件以下のため、その他の言語の一つ」として扱われていたので、1年で22倍も求人数が増えたということになります。 二つ目の理由は、Go言語は、大規模・複雑なWebサービス、プロダクトの開発が得意と紹介しましたが、「大規模・複雑なWebサービス、プロダクトとは、付加価値が高く、高単価が見込める開発案件」とも言えます。 つまり、高単価案件が揃っているのに、応募者も少ないため、さらに高い報酬金額を提示するクライアントが多い、という訳です。 Go言語の将来性 給与から業界の動向まで検証 Go言語の将来性、今後の展開ですが、先ほどご紹介した求人数の増加からもお分かりの通り、今現在、まさに飛ぶ鳥を落とす勢いで成長しています。 “Googleとのサービスの親和性が高く”、“大規模・複雑なWebサービス、プロダクト開発で多くの実績を持っており”、“サーバーサイド言語として、確かな地位を築きつつある”ため、非常に将来性のあるプログラミング言語であるのは間違いありません。 ただし、JavaやPythonなどの言語も引き続き人気があります。また、さらには上で紹介した求人情報集計で第二位に入ったScalaのようなJVM(Java仮想マシン)言語も存在感を高めているのは、Go言語の将来性という意味では、少しネガティブな要素かもしれません。 おそらく、Web業界では発展性や効率性からGo言語が好まれる一方で、過去のシステムを保守・拡張することが多いSIer業界では、これまで開発してきたJavaと共存できるJVM言語の方が好意的に受け止められると思われます。 もっとも、得意・不得意があり、「ある分野ではよく使われるが、他の分野ではまったく使われない」というのは、どのプログラミング言語でも起こることなので、あまり気にしなくても良いでしょう。 年収については、エンジニア数が増えたことで需要と供給のバランスが補正され、期待平均年収も下がる可能性はあります。しかし、Go言語のエンジニアの増加(供給)に対して、企業側のニーズの拡大(需要)が上回る状況が今後も続くと推測されるため、当面は、現在の水準を維持するものと思われます。 まとめ:Web系で存在感を増すGo言語 何度もお伝えしたことですが、IT業界の巨人Googleが開発し、大規模・複雑なWebサービス、プロダクト開発で多くの実績を持っているのがGo言語です。ベテランエンジニアの中にはGo言語のシンプルさを嫌う人が多いのも事実ですが、着実に利用シーンが拡大しています。 日本でもWeb系IT企業を中心に採用が増えており、十分、将来性が期待できるプログラミング言語です。 まだまだ日本語の書籍やインターネット情報が少なく、独力でGo言語を学ぶのはやや難しいかもしれません。しかし、すでにWeb系で活躍している方、今後Web系で活躍したい方には、ぜひ習得を目指していただきたいプログラミング言語です。 今だけ!登録で最大1,500円相当もらえるお仕事探しサービス「テクスカ」 「テクスカ」は、報酬をもらいながらお仕事探しができる新体験のスカウトサービスです。 【テクスカの4つの特徴】 1.面談するだけで、3,500円相当のAmazonギフトカードを獲得できます 2.優秀な貴方に仲間になってほしいと真に願うとっておきのスカウトが企業から届きます 3.貴方の経歴・スキルを見て正社員のオファーだけでなく副業オファーも届きます 4.転職意欲がなくとも自分のスキルが通用するか各社のCTOに評価してもらうチャンスがあります 忙しさのあまり、企業との新たな出会いを逃している… スパムのように届くスカウトメールにうんざりしている… 自分の市場価値がわからない… 社外の人からの評価が気になる… 副業の仕事が見つからない… そんなあなたにおすすめです!
Ruby on Rails

Gem Deviseによるパスワードの保存及び保安方法

はじめに Rails フレームワークを利用するアプリケーションでは登録とログインモジュールにDevise gem と bcryptがよく使っています。DeviseはRailsでおそらく最も人気な認証機能を実装できるgemです。 ユーザーのパスワードの暗号化とログイン確認に対してDeviseはデフォルトでbcryptを使用しています。 bcryptを利用しない例 下記はbcryptを利用しない認証フォローの1つ例です。 1. ユーザーが登録する時、パスワードはハッシュして、データベースに保存します。 2. ログインする時、入力したパスワードをハッシュして、データベースに保存したハッシュしたパスワードと比べて、一致したら、ログインできます。一致しなければ、「バイバイ」ですね。このアプローチには、暗号化アルゴリズムが常にパスワードが渡された固定文字列を返すという大きな欠点があります。例えば、SHA1アルゴリズムで使えば、”password” というストリングはハッシュした後いつも ”5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”というストリングを返します。 これにより、ハッカーがデータベースを攻撃し、ユーザーのパスワードハッシュであるデータを取得すると、ハッカーは、Rainbow Tableを作成してユーザー全体のパスワードを取得するために、一度だけ総当たりする必要があります(パスワード「password」または「123456」を持つユーザーは同一のハッシュ文字列を持っているため)。 したがって、同じパスワード文字列が他のハッシュを生成するソリューションが必要ですが、ユーザーがログインすると、比較結果が一致する必要があります。 そのため、パスワードに「salt」を追加する必要があります。 Bcryptによる、salt はランダムストリングです。Saltのおかげで、毎回ハッシュする時、違うストリングを返します。 bcryptを利用する例 下記はbcryptを利用する認証フォローの1つ例です。 1. ユーザーが登録する時、ランダム saltを発行して、saltとパスワードをハッシュして、encrypted_passwordを取得して、データベースに保存します。encrypted_passwordはsalt を含みます。パスワード同じですが、saltはランダムから、毎回ハッシュするのは新しいencrypted_passwordを作ります。 2. ログインする時, データベースのencrypted_passwordのsaltを取って、入力したパスワードとsaltをハッシュして、ハッシュしたストリングを取得して、そのストリングとencrypted_passwordを比べて、一致したら、ログインできます。 例えば、”my password”というストリングをbcryptで使って下記の形の1つ例でencrypted_passwordと呼びます。 $2a$12$K0ByB.6YI2/OYrB4fQOYLe6Tv0datUVf6VZ/2Jzwm879BW5K1cHey 今encrypted_passwordを分析します。 2a (最初の$の2つの間): bcrypt暗号化アルゴリズムバージョン12 (次の$の2つの間):costと呼ばれます。costの役割は何か後で分析します。K0ByB.6YI2/OYrB4fQOYLe(最後$の後のキャラクターの22個): saltと呼ばれています。6Tv0datUVf6VZ/2Jzwm879BW5K1cHey(最後キャラクターの31個): ctextと呼ばれます。ctextはsaltとパスワードからハッシュされます。 Costについて Costを説明いたします。 Costとは、ハッシュを何回実行するか、つまりどれだけ遅いかという尺度です。 あなたはそれを遅くしたい。 繰り返しますが、これはハッシュされたパスワードが盗まれた場合のセキュリティの冗長な層です。何でもブルートフォースするのは法外に高価になります。 Cost は4以上と31以下の数字です。Bcryptアルゴリズムでは例えばcostは12なら、繰り返し数は2^12=4096回。 Cost = log_2 (繰り返し数) なので、cost は高ければ、高くほどパスワードのハッシュは安全になります。 しかし、逆にcostが高ければ、高くほどハッシュの速度も遅くなります。 bcryptアルゴリズムです。 bcryptアルゴリズム 詳しくはhttps://ja.wikipedia.org/wiki/Bcryptで参考できます。 それだけパスワード保安方法は安全と思いますか? ランダムsaltはRainbow Tableを作成するコストを増加させましたが、人生は不明ですが、攻撃者は常に自分が望むものを達成する想像を絶する動機を持っています。攻撃者がスーパーコンピューターを持っているとデータベースを攻撃し、データを手に入理とします。そのスーパーコンピュータには、データのencrypted_passwordとsaltから、Rainbow Tableを作って、パスワードを見つけられます。 それでは、このリスクを最小限に抑える方法は?原則は、すべての卵を1つのバスケットに入れるのではなく、pepperです。Pepperはsaltに似たランダム文字列ですが、違いは、pepperを秘密にして、データベース以外の場所に保存する必要があることです。また、ユーザーあたりのpepperは必要ありません。ユーザーの全ては1pepper十分です。 Deviseはpepperを使っているのを見えられます。 Bcryptでhash_sceret(password, salt)からbcryptでhash(password, salt, pepper)に使うのはもっと安全になります。 ハッカーはデータベースを手に入っても、pepperがないから、rainbow tableを作れない、パスワードを取れないです。 ノート:攻撃者が何らかの方法でdbユーザーを持っていると想定している記事では、実際にはこれは非常に困難です。インフラストラクチャの設計など、他のセキュリティレイヤーがあるためです。それらの問題について話しません。 参考 Gem devise https://github.com/plataformatec/devise bcryptアルゴリズム https://ja.wikipedia.org/wiki/Bcrypt Gem bcrypt-ruby https://github.com/codahale/bcrypt-ruby Rainbow table https://ja.wikipedia.org/wiki/レインボーテーブル
PHP

PHPに将来性はない?【需要について年収データから解説します】

PHPとは? 今回は、一部では“オワコン”ともいわれるPHPについて、ご紹介したいと思います。 PHPの誕生は特殊で、カナダ人プログラマーのラスマス・ラードフ氏が作った”Personal Home Page Tools”(略してPHP Tools)を起源としています。このPHP Toolsは簡単に動的Webページを作るためのツールであり、プログラミング言語ではありませんでした。 そんなPHP Toolsですが、ラードフ氏によってオープンソースで公開されたところ、多くの人が利用し、数多の機能要望が提示されました。そして、提示された数多の要求への対応策として、PHP Toolsのプログラミング言語化、つまりプログラミング言語PHPと進化したのです。 現在のPHP(2019年現在の最新版はPHP7)は数度の改定を得て、Webページの作成、Web開発以外でも利用できる汎用性を獲得しています。 このような経緯で生まれたPHPですので、誰でも簡単にWebサイトの開発ができるプログラミング言語として知られています。ただし、“雑に書いても動くプログラミング言語”でもあり、意識的に処理効率の高いソースコードを書かないと、“とりあえず動くけれど、重たいプログラム”になりがちです。 PHPのデメリットとしてよく聞かれる、“PHPプログラマーは能力が低い”、“非効率で重いプログラミング言語”、という悪評もこれに起因します。特に初学者は自分の書いたプログラミングが動いたことに満足して、ブラッシュアップしない傾向にあるので要注意です。 ところで、なぜPHPがオワコンと言われているのでしょうか? 理由は簡単で、ライバル言語の躍進です。 Webシステム開発に強いPHPですが、PHPの代わりに使えるプログラミング言語としては、ぱっと思いつくだけでも、Ruby、Python、Java、JavaScript、Go言語などがあります。ここでは一つ一つのプログラミング言語の特徴まで紹介しませんが、数多のライバルたちを前に、PHPの地位・利用率が相対的に低下していくのでは?という危機感から現れたものです。 実際、「GitHubPullRequest」のプ言語のシェア率を見ても、2013年時点との比較で2019年は半減しています。しかし、これはあくまで、シェア率です。そもそも、システム開発自体が増えているため、シェア率が下がったからと言って、実際にPHPの利用件数も減ったのか判断できません。 例えば、日本のIT大手サイバーエージェントの事業部の一つで、ゲーム事業などを手掛けるサイバーエージェント SGEや飲食店情報サイト「くるなび」を運営するぐるなび社は、PHPを利用していることで知られます。また、WikipediaもPHPですし、オープンソースのブログソフトウェアとして有名なWordPressもPHPです。 少なくとも2019年現在、一部の人が騒いでいるような「PHPのオワコン」感はないように思います。強いて言えば、オワコンと騒がれてたことで、若手エンジニアがPHPを習得するのを敬遠しがち、というのは感じます。 PHPの現状 給与から業界の動向まで検証 今回は、求人市場の実態を知る参考値として、求人検索エンジン「スタンバイ」(株式会社ビズリーチ)に掲載された求人情報を分析した、【求人検索エンジン「スタンバイ」調べ】を利用させていただきたいと思います。 求人検索エンジン「スタンバイ」プログラミング言語別年収ランキング2018 (提示年収の中央値ベスト10) 順位 言語 年収中央値(万円) 最大提示年収(万円) 求人数(件) 1 Go 600 1,600 2,202 2 Scala 600 1,300 1,489 3 Python 575.1 1,499 9,344 4 Kotlin 575 1,200 961 5 TypeScript 575 1,200 667 6 R 574.8 1,000 220 7 Ruby 550 1,200 11,676 8 Swift 550 1,200 3,353 9 Perl 525 1,200 4,509 10 C 525 1,000 9,347 はい、PHPはランク外です。「やっぱり、オワコンじゃないですか?」と言われそうです。ただ、敢えて言わせていただくと、このスタンバイのランキングはPHPにとって、とても不利なものになっています。 このランキングは年収中央値(平均年収)で上から10言語を並べたものですが、上位、1位から6位に並んだプログラミング言語は、いずれも、ここ10年弱で日本でも注目されるようになったものです。いずれも扱えるエンジニアが不足しており、提示年収が全体的に高額化しています。 一方で、PHPやJavaなど、20年近く日本でポピュラーなプログラミング言語は、全体的に単価が安定しているため、年収中央値で評価付けされると、どうしても順位を落としがちです。もし、案件数や最大提示年収で集計したランキングも作成されれば、順位に変動があり、PHPやJavaが上位に食い込んでくるでしょう。 実際、スタンバイにてPHPの求人情報を探したところ、東京都内の正社員求人だけでも3万件ありました。全然、オワコンで廃れている感じがしないですよね。 なお、Indeedに過去3年間(2017年10月から2019年9月末)に掲載されたPHPの求人案件の平均年収は504万円だそうです。たしかに、ブームとなっている新進プログラミング言語には劣るものの、そこまで低単価ではありません。 PHPの将来性 給与から業界の動向まで検証 最後にPHPの将来性についても見ておきましょう。 PHPの将来性について、ネガティブな要素としては、以下の二つが挙げられます。 〇ライバルとなる言語が多く、相対的に地位が低下する可能性。 〇学習しやすい言語である。 一つ目の要素ですが、すでにご紹介した通り、PHPと同じことができるプログラミング言語がいくつも登場しており、今後、それらの言語に取って変わられる可能性は否定できません。 二つ目の学習しやすい言語というのも一見、ポジティブな理由に見えるかもしれませんが、将来性という意味では、ネガティブな要素にもなります。なぜならば、エンジニアの数が増えて、案件数に対して求人者が多くなってしまうと、どうしても単価が下がってしまうからです。 まして、他の言語に取って変われて案件が減っている局面で、エンジニ数が維持されたり、増えた場合、単価がガクッと下がってしまうでしょう。 しかし、PHPの将来性について、ポジティブな要素も沢山あります。 〇実際のところ、PHPで動いているWebはまだまだ多い。 〇ニーズに対して、PHPエンジニアが足りていない。 これも、すでにご紹介済みですが、オープンソースのブログソフトウェアとして有名なWordPressもPHPです。WordPressをベースに作ったWebサイトに手を加える(拡張機能を作成する)際も、基本的には、PHPを利用します。 実は、レンタルサーバ上でWordPressを使って自社HPを公開している会社も多いですが、これには、レンタルサーバの仕様上、他のプログラミング言語の強みである、フレームワークが利用できないとい事情を抱えていることも多いです。つまり、PHP以外のプログラミング言語では、WordPress並みのクオリティのサイトが構築できない、という訳です。 今後、技術の進化で状況は変わるかもしれませんが、よほどのメリットがなければ、これまでの経験、実績を捨てて、PHPから他のプログラミング言語に移行しない企業が多いと思います。そういう意味では、今後5年~10年のスパンで考えてもPHPは安定かもしれません。 さらに、これも上で少々、触れましたが、「PHPがオワコン」と言われている一方で、「PythonやGo言語が熱い」と世間で言われている影響もあり、PHPエンジニア志望者は確実に減ってきています。今後、PHPエンジニアの需要に対して供給が先細り、結果、単価が押し上げられる可能性もあります。 まとめ:PHPをオワコンと呼ぶなかれ PHPに限らずですが、あるプログラミング言語のことをオワコンと声高に主張する方ほど、その言語を使ったことがなかったり、歴史を知らない場合が多いように感じます。 PHPはもともとプログラミング言語ではなかったものが、プログラミング言語化されたものです。そして、途中でオブジェクト指向を取り入れたり、処理効率を上げたりと、時代に合わせて改良されてきました。今後も時代に合わせた進化をしていくと考えられます。 さらに、すでにPHPで動いているシステムが沢山ある以上、相対的に他の言語との比較で地位を低下させるかもしれませんが、“終わったコンテンツ”になる可能性は、世間で騒がれているよりもずっと低いのではないでしょうか? 今だけ!登録で最大1,500円相当もらえるお仕事探しサービス「テクスカ」 「テクスカ」は、報酬をもらいながらお仕事探しができる新体験のスカウトサービスです。 【テクスカの4つの特徴】 1.面談するだけで、3,500円相当のAmazonギフトカードを獲得できます 2.優秀な貴方に仲間になってほしいと真に願うとっておきのスカウトが企業から届きます 3.貴方の経歴・スキルを見て正社員のオファーだけでなく副業オファーも届きます 4.転職意欲がなくとも自分のスキルが通用するか各社のCTOに評価してもらうチャンスがあります 忙しさのあまり、企業との新たな出会いを逃している… スパムのように届くスカウトメールにうんざりしている… 自分の市場価値がわからない… 社外の人からの評価が気になる… 副業の仕事が見つからない… そんなあなたにおすすめです!
C言語

C言語の需要と将来性は?【年収データなどをもとに解説します】

C言語(C/C++)とは? C言語の将来性についてお話しする前に、まずはC言語というプログラミング言語について確認しておきましょう。 C言語は、1972年にAT&Tベル研究所のデニス・リッチーによって生まれた汎用言語です。高水準言語と低水準言語の特徴を併せ持つ、非常に革新的なプログラミング言語であり、俗に「C系」と言われる派生言語(Objective-CやJavaなど)がいくつも生まれました。 さて、高水準言語や低水準言語というのは言語の性質です。簡単に言ってしまうと、高水準言語とは、「人間には分かりやすいが機械にはわかりにくい表現をする言語」のことを言い、低水準言語とは「機械には分かりやすいが人間にはわかりにくい表現をする言語」のことです。 C言語だけでなく、JavaでもPythonなど、自分が書いたプログラムのコードを実行する前に“コンパイル”が必要な言語って多いですよね。このように“コンパイル”が必要な言語が高水準言語です。 そして、この“コンパイル”ですが、簡単に言うと「人間にとって分かりやすく書かれたソースコードを、機械が間違えなく理解できるように翻訳」しているのです。 ただ、C言語はJavaやPythonと違い、基本的には「人間には分かりやすいが機械にはわかりにくい表現」でソースコードを記述していくものの、随所で、「機械にも分かる表現」を取り入れている言語なのです。 C言語のこの特徴は、「他のプログラミング言語よりも実行速度が速い」、「ハードウェアに対して細やかなコントロールを行うことができる」、といったメリットにも繋がっており、大量のデータを高速で処理させたいAI(人工知能)開発などの現場では、C言語の利用も多いです。 なお、C言語で実装されたものとしては、他にも以下のようなものがあります。 〇UNIXやLinuxなどのコンピューターのOS(ただしUNIXは最初からではなく、デニス・リッチーやケン・トンプソンによって1973年に書き直された形になります) 〇Webブラウザーの「Chrome」やWindows標準ソフトの「メモ帳」などのソフトウェア 〇データベース管理システムの「MySQL」やWebサーバシステムの「Apache」などのミドルウェア 〇電化製品や車に搭載されているような組み込み系システム 〇工場の製造ライン上で使われる産業用ロボットの制御系システム 〇銀行の基盤システム(勘定系システム)などのエンタープライズシステム このように、C言語は汎用言語と言われるだけあって、実に多くの現場で利用されています。 ちなみに、C言語のことをC/C++と表記することも多いですが、その理由も簡単に説明しておきましょう。 C++とは、簡単に言うと、C言語の規格を拡張してオブジェクト指向にも対応させたC言語の上位規格です。C言語を拡張した言語規格なので、互換性もあり、一緒に使われることが多いです。そのため、ひとまとめにしてC/C++と記載されることがあるのです。 なお、多くのシステム開発でオブジェクト指向という考え方を取り入れているため、募集要項などでは「C言語を利用」と書かれていたものの、実際は「C++を含めたC言語」が使われている現場が多いです。 C言語/C++のフリーランス案件を紹介してもらう > C言語の現状 給与から業界の動向まで検証 将来性を語る前に、現状分析から行いましょう。 C言語の現状としては、上でも紹介した通り、多くの場面で利用されています。ただし、Javaのように“多くの場面で使われているものの、エンジニアの数も多いので、市場と供給のバランスが調整されて、単価はあまり高くない”という言語もあります。 C言語の場合はどうでしょうか? ということで、求人市場の実態を知る参考値として、求人検索エンジン「スタンバイ」(株式会社ビズリーチ)に掲載された求人情報を分析した、【求人検索エンジン「スタンバイ」調べ】を利用させていただきたいと思います。 求人検索エンジン「スタンバイ」プログラミング言語別年収ランキング2018 (提示年収の中央値ベスト10) 順位 言語 年収中央値(万円) 最大提示年収(万円) 求人数(件) 1 Go 600 1,600 2,202 2 Scala 600 1,300 1,489 3 Python 575.1 1,499 9,344 4 Kotlin 575 1,200 961 5 TypeScript 575 1,200 667 6 R 574.8 1,000 220 7 Ruby 550 1,200 11,676 8 Swift 550 1,200 3,353 9 Perl 525 1,200 4,509 10 C 525 1,000 9,347 C言語は提示年収中央値(つまりは期待平均年収)で第10位という成績を残しています。しかも、求人件数という意味でも、Ruby、Pythonに続く第3位です。年収、案件の件数どちらの観点からみても、C言語は労働市場で武器となるプログラミング言語である、ということが一目瞭然です。 また、募集内容の中身を見ても、最先端のAIを研究するベンチャー系、電化製品や産業用ロボット向けの組み込みシステム・制御システムを開発する製造業系、エンタープライズシステムを開発するSIerなど、様々な領域から求人が行われていることが見て取れます。 C言語の将来性 給与から業界の動向まで検証 C言語の現状が見えてきたところで、改めてC言語の将来性を分析したいと思います。 C言語の将来性を考える上でポジティブな要素も多くあります。 〇C言語で動いているシステムは多い。 〇AI分野でC言語の注目度は高まっている。 〇C言語はPythonやJavaはもちろん習得難易度が高く、エンジニア数が増えない。 すでに何度も触れましたが、C言語はこれまでも多くのシステム開発で使われてきました。それらを保守するためにも、C言語がわかるエンジニア・プログラマーが必要とされ続けると考えられます。 また、AI開発において、C言語はもっとも好ましい言語の一つと考えられています。AI開発といえば、Pythonの利用が有名ですし、実際、Pythonで作られたAIはたくさんあります。しかし、PythonからC言語を呼び出すことも可能なため、“ほとんどPythonで作られているけれど、処理効率を上げるため、部分的にC言語を使っているAI”も少なくありません。 そして、C言語はPythonやJavaよりも習得難易度が高く、「人気が高まったことによって、急激にエンジニアが増えて単価が下がるリスク」が低い、という点も魅力の一つです。 逆にC言語の将来性を考える上で、ネガティブな要素としては以下の事項が指摘されます。 〇C言語からJava(JVM言語)など新世代の言語へ移行する動きがある。 習得難易度が高く、エンジニア数が増えないという点は、システムを保有・利用する企業からすると、人材確保に苦労する、ひいては保守費が高くなりがち、という欠点にもなります。また、技術の発達に伴う環境変化(次世代のプログラミング言語の登場など)もあり、C言語にこだわる必要がなくなった領域もあります。 上記の事情や、その他の理由で、C言語から、例えばC系言語のJavaに移行するといった例は確かに増えています。 もちろん、移行にあたって、C言語がわかるエンジニアが必要ですから、そういう意味では、仕事はなくなりませんし、移行作業は規模が大きくなるため、比較的、期間も長く、単価も高い、おいしい仕事になるかもしれません(その分、デスマーチ化するリスクも高いですが、、、)。 C言語の将来性の結論としては、近い未来(5年~10年)では、劇的にニーズが減って単価が下がることはないです。むしろ、AI分野からのニーズは増えるかもしれません。 ただ、その先まで見据えると、「どうしてもC言語を使いたいAIや特殊なエンタープライズシステム」などを除いて、C言語から他言語で置き換えが進み、C言語が動くシステムが減っている可能性は十分に考えられます。ただ、まったくC言語がなくなる可能性は低いため、言語としての将来性は高い部類に入るでしょう。 まとめ:C言語は将来性が高い! 繰り返しになりますが、C言語は現在、安定した地位を得ており、さらにAI時代の最先端を行く、将来性の高いプログラミング言語です。 また、学習難易度が高い理由としては、ハードウェアを繊細に制御できるプログラミング言語であるということは、ハードウェアの動きを理解していないと、まともなプログラムが書けない言語、ということもでもあります。 筆者の経験からいって、ハードウェアリソース的に無駄が多く、さらにはメモリリーク(メモリ開放せずに、最終的にはシステムを止めてしまう重大なバグ)を起こす欠陥プログラムを書く人というのは、ハードウェアの動きが分かっていない人です。 逆にC言語が扱えるエンジニア、プログラマーで、そのようなバグを作る人を見たことがありません。 プログラミング言語初心者には相当ハードルが高いため、最初の言語にはなりにくいですが、学習という意味でも、C言語は学ぶ価値の高いプログラミング言語ではないかと思います。 今だけ!登録で最大1,500円相当もらえるお仕事探しサービス「テクスカ」 「テクスカ」は、報酬をもらいながらお仕事探しができる新体験のスカウトサービスです。 【テクスカの4つの特徴】 1.面談するだけで、3,500円相当のAmazonギフトカードを獲得できます 2.優秀な貴方に仲間になってほしいと真に願うとっておきのスカウトが企業から届きます 3.貴方の経歴・スキルを見て正社員のオファーだけでなく副業オファーも届きます 4.転職意欲がなくとも自分のスキルが通用するか各社のCTOに評価してもらうチャンスがあります 忙しさのあまり、企業との新たな出会いを逃している… スパムのように届くスカウトメールにうんざりしている… 自分の市場価値がわからない… 社外の人からの評価が気になる… 副業の仕事が見つからない… そんなあなたにおすすめです!
保険

会社員からフリーランスに転身 失業保険はどうなるの?

失業保険とは? 失業保険というと、「失業中の方に対して公的機関から支給されるお金」というイメージを持っている方も多いと思います。その認識は間違えではありません。しかし、正しくもありません。 勘違いされている方も多いですが、そもそも“失業保険”というものは2019年現在の法制度上、存在しません。「失業中の方に対して公的機関から支給されるお金」は、正しくは、“雇用保険”の仕組みの一つである“失業等給付”になります。 「失業保険は雇用保険の仕組みの一部である」というのは、とっても重要なポイントです。“失業等給付(失業保険)”の根拠となる雇用保険ということは、「雇用される立場の労働者のための保険」です。自分で事業を行っている開業者、独立したフリーランスは、雇用される労働者ではないので、(原則的には)雇用保険で守られる対象者ではないということになります。つまり、“失業等給付(失業保険)”を受け取れる立場ではないのです。 では、「まだ開業届けを出していないけど、独立してフリーランスになりたいんだ」という方はどうなるのかも、考えてみましょう。 結論から言いますと、非常に難しいところですが、“失業等給付(失業保険)の対象者になれる可能性はある”と言えます。ただし、条件があります。 その条件とは、「求職活動も行うこと」です。失業等給付(失業保険)を受け取るための条件として“就職の意思がある人”という決まりがあります。失業中だからといって、仕事も探さず、ぶらぶらして遊んでいるだけの人にはお金を渡せないよ、という訳です。 “働かざる者食うべからず”を体現した、当たり前と言えば、当たり前の規則ですが、あくまで「雇用者として働く人を守るための制度」のため、 “独立の準備だけをしている人(=雇用者になる気がない人)”に対しては、支給ができないという欠点もあります。 不正受給にならないための注意点 不正受給と認定された場合、不正受給額の全額返済、さらに不正受給額の二倍の金額を納付しなければなりません。ちなみに、合計で不正受給額の三倍を支払う必要があることから、俗に“三倍返し”と言われています。さらに悪質だと認められた場合は、詐欺として逮捕されることもあります。 経済的なダメージはもちろん、社会的なダメージも大きいので、不正受給しないことが重要です。そのための対策としては、基本的には以下の三つです。 ①ハローワークの担当者としっかりコミュニケーションを取っておくこと。「大丈夫かな?」と疑問に思ったことは相談しましょう。 ②申請書をはじめとするドキュメントには正確な情報を記載すること。日雇いアルバイトも就労ですし、内職(ソーシャルワーキング含む)で得たお金は収入です。 ③開業届を提出したなど、自身のステータスに変更があった場合、すぐに報告すること。「名義貸し」でも会社の役員は役員です。雇用保険の対象外とみなされるかもしれません。 「アルバイトの収入があると失業保険を打ち切られる」と思って、黙っていた結果、不正受給とみなされてペナルティーを受ける方も多いです。実際は、アルバイトや内職で収入があったり、会社役員として登録されているからといって、ただちに支給を打ち切られることはありません。支給額に変動があるだけです。 問題視されるのは「そのような収入があるのに黙っていて、収入がない人と同額を受け取っていた嘘つき」「いわゆる詐欺ではないか?」という点です。 なお、ハローワークの公式サイトにも不正受給の具体例とペナルティーが紹介されているので、そちらも参考にしてください。 ちなみに、ちょっとしたアルバイトや内職だったらバレないだろう、と思っている方も多いですが、高確率でバレます。アルバイトであっても、雇用保険に加入するのが一般的ですが、“雇用保険に誰がいつ加入したか”という情報は他ならぬハローワークに提出されるので、すぐにバレます。 クラウドソーシングで見つけた内職も、報酬の授受に伴う税金の支払いから、バレてしまう確率が高いです。深く意識せず、「最近ちょっと仕事が忙しくて」などと担当者にポロっと言ってしまう、うっかりさんも多いようです。 そして、もっとも失業等給付(失業保険)の不正受給がバレる理由だと言われているのが密告です。 失業等給付(失業保険)を受け取っているとは知らなかった、他のアルバイトや雇用主が、ハローワークの聞き取りに対して「ああ、この人、うちで働いていますよ」と言ってしまうパターンもあります。 しかし、それ以上に“失業保険の不正受給は許さない”という正義感に駆られた周囲の人物(元の職場の同僚や、親族も含めて)から、ハローワークへと告発の連絡が入るというケースが非常に多いということです。 不正受給認定されると良いことは何一つないので、絶対に不正受給と認定されないように、報告すべきことは正直に報告するようにしましょう。 失業保険をもらえる可能性はゼロではない 再就職手当等 これまで何度もご紹介してきた通り、俗に失業保険と言われる“雇用保険の失業等給付”は雇用される意思のある、労働者のためのものです。雇用者ではない開業届けを出して人、独立してフリーランスになった人は、支給できないのが原則です。 ただし、規則ができれば、規則の例外もできるのが世の常で、雇用者ではない働き方を選択した人にも支給できる法的根拠が整備されました。それが『再就職手当』です。 詳細な説明はハローワークが発行している公式案内を読んでいただければと思いますが、『再就職手当』の概念をかいつまんでご説明いたします。 結局、 “雇用保険の失業等給付”の目的は失業者を減らすことです。その目標を達成するための、失業期間が短い人には、特典として手当を出します、という制度が『再就職手当』です。そして、通常の“失業等給付(失業保険)”の場合は、会社で働く雇用者を目指す人のみが対象でしたが、『再就職手当』は「開業・独立でも労働は労働だから支給します」ということになりました。 なお、政府としても副業の促進を行っているなど、働き方の多様化が叫ばれている状況を受け開業届けを出して方や独立してフリーランス になった人向けに“失業等給付”のようなものを創設したり、制度を変更できないか、検討自体は進められています。 ただし、フリーランスのための団体(組合)を作って、その中で仕事を獲得できず、収入のない加入者を援助する共済保険のような仕組みの設立などのアイデアは提言されたものの、現在、具体化の動きは見られないというのが現状です。 まとめ:フリーランスに失業保険は“原則”支払われない! 繰り返しになりますが、いわゆる失業保険と呼ばれる“雇用保険の失業等給付”は開業届けを出した人やフリーランスとして独立したい方は、失業者とみなさず、対象外としています。そのため、原則的には「フリーランスは失業保険をもらえない」ということになります。 しかし、昨今、働き方の多様化が進んでいる中で、『再就職手当』という形でフリーランスを目指す方を救済する道も(まだまだ不完全だとは思いますが、)用意されました。自分は支給対象となるのかモヤモヤしている方は、一度、ハローワークに赴いて、相談してみましょう。
<span class="translation_missing" title="translation missing: ja.layouts.footer.icon_back_to_top">Icon Back To Top</span>
TOP