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

お役立ちコンテンツ

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

該当コンテンツ数99件中97~99件を表示
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/レインボーテーブル
Kotlin

人気のプログラミング言語ベスト20 第15位:Kotlin

Kotlinとは 今回はある種のプログラミング言語の人気投票といえる GitHubPullRequest にて2019年1月~3月統計にて第15位という成績を収めたKotlinをご紹介いたします。 Kotlin は2017年にGoogle社が開催する開発者向け年次カンファレンス「Google I/O」にて、androidの公式開発言語となることが発表されて以来、注目度が高まっているプログラミング言語です。 その特徴は、Java仮想マシン(JVM)上で動く、Javaの後継プログラミング言語となることを目指したプログラミング言語であり、Javaとの親和性が非常に高い点です。 さらにJVM上で動作する“ポストJava言語”はいくつか他にもありますが、現在のところ、もっとも実装例が多いと思われ、着実に有力な言語へと成長しています。 Kotlin というプログラミング言語を理解していただくために、改めて、Javaというプログラミング言語について確認しておきましょう。 Javaは非常に成功しているプログラミング言語です。 例えば、独立行政法人の情報処理推進機構(IPA)が毎年発行している「ソフトウェア開発データ白書」では、日本のIT企業がシステム開発で利用したプログラミング言語の統計データが掲載されていますが、長らくJavaが利用率第一位です。 Javaの強みは、汎用プログラミング言語としてシーンを問わず利用できる点です。 Microsoftが開発したプログラミング言語であるVisual Basic(VB)で書かれたソースコードは、もちろんWindows上でプログラムとして動作させることができます。 しかし、同じソースコードをandroidに持って行っても、動作することはありません。 ところが、Javaの場合、同じソースコードがWindows上でもandroid上でもプログラムとして動作できる特別な仕組みが用意されています。 そして、その特別な仕組みがJVMです。 JVMはWindowsだとかandroidだとか本来のOSの上に展開される、Javaプログラムを実行するための特別な仮想環境です。 つまり、Javaプログラムからすると、自分がWindowsデバイス上で動作しているのか、androidデバイス上で動いているのか分からないし、気にもしなくても良い仕組みになっています。 この仕組みによって、Javaには「システムの移植が簡単」という利点が生まれ、今日の高い利用率へと繋がりました。 とはいえ、Java自体は1995年に公開されたものであり、仕様的に古くなってしまったところや、様々な分野で成功しているがために、大きく仕様変更ができず、改善が期待されながら放置されている問題点もある、という指摘がありました。 そうしたJavaへの問題意識がきっかけになり、2010年代頃からJavaのメリットである「JVM上で動作する」という利点を引き継いだ新たなプログラミング言語が登場するようになったのです。 その一つが、Kotlinということになります。 なお、Kotlinの開発を行っているのは、ジェットブレインズ社というチェコの会社です。 ジェットブレインズ社の代表的なプロダクトはJava用統合開発環境である「IntelliJ IDEA」です。 Javaの統合開発環境といえばIBMによって開発された「Eclipse」が非常に有名ですが、ZeroTurnaroundという海外のソフトウェア会社の調査によると、2016年にはその「Eclipse」からシェア率一位の座を奪うに至っています。 Kotlinは、Javaを知り尽くした企業が開発したポストJava言語というべき存在であり、現場のエンジニアファーストだからそこ注目度も高まっているのでしょう。 ところで、何度もKotlinのことをポストJava言語と呼んでいますが、この二つのプログラミング言語は“ライバル関係で両立できない存在”ではありません。 JavaとKotlinはどちらもJVM上で動作するプログラミング言語ですので、相互利用することを前提にしてKotlinは仕様を定められています。 ちなみに、Kotlinはフィンランド語で「やかん」を意味するそうで、ロゴマークもやかんをイメージしたもの、との説明を何度も見聞きしましたが、いまだに筆者にはやかんには見えません。。。 昨年の順位と比較して考察 2019年1月~3月統計では第15位だったKotlinですが、去年の同じ時期(2018年1月~3月)の統計では第16位でした。 順位的には大きな変動がありません。 考えられる理由としては、新規導入ニーズが一周した、ということが考えられます。 周りの方を見ていても、良さそうな新たなサービスが紹介されたとき、すぐに飛びつく人もいれば、他の人の状況を見てから、そのサービスを利用するかどうか判断する人に分かれますよね。 プログラミング言語にも同じことが言えます。 新たなものに対して、多少のリスクがっても良いものなら新たなプログラミング言語であるKotlinを利用したい、というスタンスの企業・案件もあれば、Kotlinの十分な評価ができるまで、実績あるJavaを使うという案件・企業もあるのです。 現状、積極的にKotlin利用を進めているのはandroidアプリ開発の世界です。 逆に、組み込み系やインフラ系のエンタープライズシステムの場合は、Kotlinの利用はあまり考えられていないと思われます。 万が一Kotlinのバグのせいで製品が動作不良を起こして、利用者が死傷した、ということにでもなったら、会社の命運すら左右しかねませんので、なかなか新技術に移行できないのです。 これから数年の間で、Kotlinを使ったエンジニアたちがKotlinへの移行を他のエンジニアにも推奨するのか、それともJavaに戻ってくるのか、あるいは、androidアプリ開発以外の分野のエンジニアたちもJavaからKotlinへの移行が広がっていくのか、気になるところです。 Kotlinは転職に強いのか ポストJava言語であり、androidの公式開発言語となっている、という注目度の高さ、さらに、比較的世代が新しく、扱えるエンジニアの数が少ない点から、転職市場においても非常に優位に立てる言語と言えるでしょう。 ただし、Kotlinを利用できるエンジニアに対して、多くの企業はJavaが利用できることも期待している、あるいは、Java/ Kotlinのような一体のスキルセットだと考えていることが多いです。 なぜならば、KotlinはJavaと互利用をすることが前提のプログラミング言語です。 もちろん、今後、Kotlinのみでまったく新たなシステムを開発していく、ということも増えていくかと思います。 しかし、まだまだ現状は「これまでJavaで作ってきたシステムに対して、Kotlinで保守改善していく」あるいは「ベースはKotlinで開発するが、適宜、過去にJavaで作ったソフトウェア資産を呼び出して利用する」などJavaとKotlinでシステムを作っていくといった、併用が基本です。 「Kotlin“が”できるエンジニア」というよりも「Kotlin“も”できるエンジニア」を求人企業が求めている傾向は非常に強いと思います。 活躍できる業種と年収 Javaは汎用プログラミング言語として様々なエリアで活躍しており、ポストJava言語であるKotlinにも、大きな可能性があります。 しかし、上でも触れた通り、現在のところ、Kotlinのニーズはandroidアプリ開発(ゲーム含む)に絞られています。 それも基本的にはベンチャー系IT企業からの募集が大多数です。 そのため、福利厚生などはあまり期待できないのかもしれません。 ただし、注目すべきは年収で、各社フリーランス向け求人サイトにて紹介されているKotlinの案件の平均単価は月90万円です。 月単価が100万円をこえている案件も少なくありません。 正社員向け求人サイトでも、提示年収が400万円から1800万円と他のプログラミング言語と比べても、非常に高年収が期待できます。 実質、1000万円以上の年収提示が多いというのは、それだけKotlin経験があるエンジニアがニーズに対して少なく、各社ともに集めるのに苦労している、ということなのでしょう。 まとめ:今後の成長に期待 すでに触れた通り、androidの公式開発言語に選ばれたことにより、一気に注目度、ニーズとも高まると同時に、転職市場においても強力な存在になったKotlinですが、今後、他の領域でもポストJava言語として広がっていくのか、目が離せません。 Java/ Kotlinのスキルセットを組むことができれば、当面の間、転職市場で勝ち組になれるのは、間違いないでしょう。 今だけ!登録で最大1,500円相当もらえるお仕事探しサービス「テクスカ」 「テクスカ」は、報酬をもらいながらお仕事探しができる新体験のスカウトサービスです。 【テクスカの4つの特徴】 1.面談するだけで、3,500円相当のAmazonギフトカードを獲得できます 2.優秀な貴方に仲間になってほしいと真に願うとっておきのスカウトが企業から届きます 3.貴方の経歴・スキルを見て正社員のオファーだけでなく副業オファーも届きます 4.転職意欲がなくとも自分のスキルが通用するか各社のCTOに評価してもらうチャンスがあります 忙しさのあまり、企業との新たな出会いを逃している… スパムのように届くスカウトメールにうんざりしている… 自分の市場価値がわからない… 社外の人からの評価が気になる… 副業の仕事が見つからない… そんなあなたにおすすめです! フリーランス案件を探す
Perl

Perl:人気のプログラミング言語16位【2019】

Perlとは 今回はある種のプログラミング言語の人気投票である「GitHubPullRequest」にて2019年1月から3月の統計にて第16位にエントリーされたPerlについてご紹介いたします。 Perlは1987年に誕生し、1991年に公開されたプログラミング言語です。 現在も主要プログラミング言語として比較的使われるプログラミング言語の中では比較的歴史が長い言語です。 過去記事の「プログラミング言語の歴史 <Perl編>」に詳しいですが、C言語やシェルなどしかなかった時代に、比較的、簡単に記述・実行できる“スクリプト言語”を目指し、開発されました。 スクリプト言語の定義はあいまいですが、C言語より記述の自由度が高く、そして、C言語と異なり、実行前にコンパイル(ソースコードをコンピューターに理解できる機械語に変換すること)が不要という点は、Perlが登場した当時、非常に画期的でした。 Perlの案件を探す ▼ P系プログラミング言語、Perl 現在の使われ方は? Perlは一気に主要プログラミング言語の一つとなると同時に、Perlの問題点・不満点の解消を目指した、新たなプログラミング言語がいくつか生まれました。 なお、こうした経緯で誕生したPHP、Python、Rubyといった言語は、Perlの影響を受けながら誕生・成長してきたため、Perlも含めて「P系プログラミング言語」と呼ぶ人もいます。 話はPerlに戻すと、確かにPerlは「汎用スクリプト言語」という呼ばれ方がされますが、現在、実際の主な使われ方は、CGI(Common Gateway Interface)の実装です。 CGIとは動きのあるWebページの実装方法の一つです。 簡単に言うと、利用者側のWebブラウザーの要求に応じて、サーバー側で外部プログラムを呼び出し、実行結果をWebブラウザー側に送ることで、動きのある表現を実現する方法です。 例えば、ショッピングサイトで買い物中に「買い物かご」の中身を確認したいと思い、買い物かごボタンをクリックしたとしましょう。 まず、Webブラウザーから、インターネット経由で「買い物かごの中身を見せて」という要求がサーバーに対して発信されます。 その要求を受け取ったサーバーは、「ユーザーごとの買い物かご情報を教えてくれるプログラム」を呼び出し、買い物かご情報を取得し、Webブラウザーに対して「情報だよ」と送信します。 そして、その情報を受け取ったWebブラウザーが、「買い物かご情報」を表示するという仕組みになっています。 ちなみに、Web業界では、プログラミング言語のうちWebブラウザー側(クライアント側)で実行されるものをフロントエンド言語、サーバー側で実行されるものをバックエンド言語と分類することが多いです。 その分類に従えばPerlはバックエンド言語となります。 ▼ Perlの系統 Perl6は「失敗した言語」 もう一つ補足しておくと、Perlには、Perl5(いわゆる、普通のPerl)とPerl6の二系統あります。 番号が示す通り、もともとはPerl5の次期バージョンとして整備されたPerl6でしたが、Perl5よりも、より自由度の高い記述など、革新的なプログラミング言語となるように実装を進めていった結果、これまでのPerlとの互換性がまるでなくなってしまいました。 結果、Perlの新バージョンではなく、Perl6という新たなプログラミング言語、という扱いを受けています。 Perl6は日本ではまず使われることはありません。 世界的にもGitHubPullRequestのランキングで40位以下と非常に利用率が低いため、Perl6は“失敗したプログラミング言語”と揶揄されがちです。 Perl6の学習をしても、あまり年収アップや転職市場での優位性に繋がらないので、普通のPerlと間違って教本を買ったりしないようにしましょう。 Perlの現在 昨年の順位と比較して人気を考察 Perlは2019年1月から3月の統計では第16位でしたが、2018年1月から3月では18位と実は順位を上げています。 順位が上がった原因としては、Perlの利用率が上がったというよりは、近い順位だった他の言語、例えばSwiftやObjective-Cなどの利用率が下がってしまったことが大きいように思います。 もともとiOSアプリ開発の現場で使われてきたSwiftやObjective-Cは、昨今のiPhoneの販売不振などが原因で、じわじわと利用率を低下させていると言われています。 逆に言えば、Perlは古い世代の言語でありながら、利用率が安定しています。 Webサイト、Webシステムは絶対になくならないでしょうし、Perlは他の後発言語よりも歴史が長い分、資産やナレッジが多いというメリットもあります。 それらPerlの蓄積を利用したい場合、敢えて、PythonやPHPなどの世代の若いプログラミング言語を使わずに、Perlを積極的に選択することも多々あります。 また、保守運用においても、もともとPerlで書かれているWebシステムの修正・バージョンアップの方法として、改めて新しい世代のプログラミング言語ですべて再作成する、全面更改するのもアリです。 しかし、全面更改するよりも、Perlを使って問題個所・更新箇所のみ手を加えていく方が、コストもリスクも低いでしょう。 そのようなニーズのおかげで、Perlは古い言語でありながら、順位も安定しているのでしょう。 Perlは転職に強いのか すでにご説明した通り、Perlは歴史のあるプログラミング言語であり、今なお多くの現場で利用されています。 そのため、求人市場においても、価値のあるスキルになっています。 ただし、“パンチ力”に欠けるのは否めません。 たしかに、Perlはニーズが安定しているプログラミング言語ですが、やはり世代の古い言語ですので、敢えてPerlにこだわる理由がないのであれば、わざわざPerlにしない、というセオリーもあります。 そういう意味では、他の言語も十分な実績を積んで、Perlと同程度の過去の資産が蓄積されれば、急速にPerlの存在感は減少するでしょう。 実際、ここ数年、Webサイトのリニューアルに合わせて、PerlからPythonなどの世代の新しいプログラミング言語へと全面更改する案件の人材募集も散見されます。 単に「Perlが扱える」だけではダメで、「Perlは扱えるが、他のプログラミング言語にも対応できるようになりたい」という積極性・柔軟性が求められていると感じます。 Perlで活躍できる業種はWeb系IT企業 すでにお伝えした通り、Perlは基本的にはWebシステム開発で使われるプログラミング言語です。 そのため活躍できる業種も、Webシステム開発を行っている、いわゆるWeb系IT企業が主になります。 もちろん、非IT企業が自社Webサイトを運営していることもありますので、そうした非IT企業からの求人も、ごくわずかですが、登場することもあります。 Perlエンジニアの年収 年収ですが、エンドサイドエンジニア(場合によってはサーバサイドエンジニア)として扱われ、その役職に応じた給与体系で支払われることが一般的です。 具体的な金額で言うと、正社員の場合年収300万円~700万円のレンジに収まることが多いです。 フリーランスの場合、月50万円から100万円が多く、平均はおおむね70万円代と、他のプログラミング言語と同程度か、注目度の高い世代の新しいものに比べて、やや低いくらいの年収となりそうです。 まとめ:Perlだけで勝負は危険? 繰り返しになりますが、Perlは歴史のあるプログラミング言語であり、長い歴史があるからこその強みもあれば、弱みもあります。 現在のところ、Perlは主要言語としての地位を守っていますが、IT業界は移り変わりが激しく、実際、近年、どんどん新たなプログラミング言語が登場しています。 ある日突然、ピタッとPerl案件がなくなる、ということはないでしょうけれど、じわじわと減っていく可能性は十二分にあるので、Perlだけで勝負するとは考えずに、複数のプログラミング言語を身に着けることをお勧めします。 なお、他のプログラミング言語も、P系言語など、Web業界での利用頻度が高いプログラミング言語を戦略的に選択すると、転職市場で強い人材になれるでしょう。 フリーランス案件を探す 今だけ!登録で最大1,500円相当もらえるお仕事探しサービス「テクスカ」 「テクスカ」は、報酬をもらいながらお仕事探しができる新体験のスカウトサービスです。 【テクスカの4つの特徴】 1.面談するだけで、3,500円相当のAmazonギフトカードを獲得できます 2.優秀な貴方に仲間になってほしいと真に願うとっておきのスカウトが企業から届きます 3.貴方の経歴・スキルを見て正社員のオファーだけでなく副業オファーも届きます 4.転職意欲がなくとも自分のスキルが通用するか各社のCTOに評価してもらうチャンスがあります 忙しさのあまり、企業との新たな出会いを逃している… スパムのように届くスカウトメールにうんざりしている… 自分の市場価値がわからない… 社外の人からの評価が気になる… 副業の仕事が見つからない… そんなあなたにおすすめです!
<span class="translation_missing" title="translation missing: ja.layouts.footer.icon_back_to_top">Icon Back To Top</span>
TOP