
Laravel
Laravelの人気と将来性を徹底的に解説!
「Laravel」という言葉をご存知でしょうか?LaravelはPHPで人気のフレームワークで、WEBフレームワークの一種です。イチからコードを書いていたら何週間、何ヶ月とかかってしまうところを、Laravelのようなフレームワークを用いることで圧倒的に工期を短縮することが可能になります。 Laravelの特徴や魅力、使用するメリットはどんな点にあるのでしょうか?Laravelの将来性とともにお伝えしていきます。 テクフリでフリーランス案件を探してみる Laravelとは? Laravel(ララベル)は、PHPのフレームワークの1つです。プログラムを開発する際に、工程を簡素化してスピーディーに機能を実装するために生み出されたのがフレームワークという存在です。 LaravelはPHPのコーディングを圧倒的に楽にしてくれるフレームワークであり、メンテナンスも容易になります。PHPのフレームワークの中でも、今最も人気なのがLaravelなのです。 Laravelを使いこなすためには、まず何よりPHPの知識が必要です。特にPHPのバージョン管理を行う「Composer」というソフトを利用しますので、Composerの扱いにも慣れておくと良いでしょう。 PHPのほかにも、HTMLやCSSの知識が必須です。とはいえ専門的なスキルを求められるわけではないので、基本的な知識があれば十分です。 Laravelの機能は? そんなLaravelが人気を博しているのにはさまざまな理由があります。 たとえば、「日本語での情報量が多い」点があげられます。Laravelは世界中で注目されているフレームワークですが、日本にもLaravelを支持するエンジニアが多く、ブログなどで詳しく説明されていることが多くなります。 もちろん英語圏を探せばさらなる情報が手に入りますので、機能を学んだりトラブルシューティングを行ったりする際には大きく役に立ちます。その意味では学習コストが低く、初心者が手軽に学びやすいフレームワークと言えます。 なお、PHPフレームワークとしては、日本のエンジニアで広く使われている「CakePHP」というフレームワークもあります。こちらは海外ではあまり使われなくなってきており、利用者は減少傾向にあります。 LaravelよりもCakePHPのほうが動作は早いという特徴はありますが、今から習得するのであれば圧倒的にLaravelがおすすめです。 というのも、Laravelには先進的な機能が数多く実装されている利点があるからです。今後は間違いなくLaravelがメジャーなフレームワークへシフトしていくと考えられるため、優先して学習しておくに越したことはないのです。 ちなみに、Laravelの公式サイトには「The PHP Framework For Web Artisans」というコピーが載っています。「Web職人のためのPHPフレームワーク」という意味合いです。Webアプリ開発に携わりたい、新たなスキルを身につけたいと考える方にぴったりのフレームワークと言えるでしょう。 Laravelを使用するメリットは? Laravelには、従来のフレームワークと比べて「学習コストが低い」「自由度が高い」「利用者が増加傾向にある」という特徴を持ちます。非常に使い勝手の良いフレームワークであったために、ここまで大きな人気を博すまでになったのです。 そうした特徴を踏まえると、まずLaravelを使う大きなメリットとして「簡単にマスターすることができる」という点があげられます。PHPに馴染みがない人ですら扱えるほどの難易度のため、イチから学び始める場合にもハードルが低くなるのです。 学習コストが低ければ短時間で習得することができるため、すぐさま仕事に活かすことも可能になります。転職で年収アップを考えている方や、今の職場でキャリアアップを考えている人にとって大きな利点となるでしょう。 なお、Laravelには「Artisan」というコマンドが用意されており、これを使うことによってシンプルに設定・更新などを行うことができるようになります。Artisanコマンドと少しのコードを打ち込むだけで、タスク管理アプリのようなちょっとしたWebアプリを開発できることもポイントです。 Laravelはその自由度の高さにより、さまざまなニーズに応じてプログラムを組むことが可能になります。CakePHPのような他のフレームワークの場合、コードの記述箇所などに多くの規約があります。それと比べると、Laravelは自由に開発を進めることができるメリットを持ちます。 もちろん機能性を高めたWebアプリを作るなら相応の知識が必要となるものの、一定のスキルを持つエンジニアであれば自由に開発を行えるようになります。 この特徴を活かすことにより、クライアントのニーズにも細かく応えられる開発が可能になります。クライアントからの満足度が上がったり、あるいはユーザーからの評価が高まったりすることも多くなるでしょう。 また、国内外で利用者が増加傾向にあることから、情報が入手しやすく、学習も容易になるメリットが得られます。「ここはどうすればいいんだろう?」と悩んだときにも、ネット上の資料や書籍を検索することで対処法を見つけやすくなるわけです。 今後Laravelがメジャーなフレームワークとなれば、経験者が高待遇で迎えられることも多くなり、年収アップに繋がることでしょう。今後の将来性に投資して、今から勉強しておくことで大きなリターンに結びつくかもしれません。 Laravelの将来性は? 続いて、Laravelのこれからの将来性についてもみていきましょう。 まずPHPのフレームワークに関して言えば、日本国内では「CakePHP」が長らくトップシェアを誇っていました(Googleトレンドより)。しかし2018年や2019年ごろになってくると、だんだんとCakePHPのシェアをLaravelが追い抜く形になっており、Laravelの人気が急上昇していることがわかっています。 全世界のシェアを見てみても、CakePHPの利用者が年々減少していく傾向にあります。代わって「Symfony」や「Laravel」のシェアが高まっており、最近ではこの2つのフレームワークが世界の主流となっています。 日本でも世界中でも、Laravelの人気度は右肩上がりに上昇しています。このトレンドは今後しばらくは続くことになるでしょう。そうなれば自然とLaravelのスキルが求められることも多くなり、Laravelを通じた開発経験を持つエンジニアを重宝する企業も増えてきます。 今からLaravelを学びスキルを磨いておけば、将来高く評価される人材となることも難しくないでしょう。あなたも今からLaravelを学習してみてはいかがでしょうか? まとめ:近年人気が急上昇 LaravelはPHP向けのフレームワークの1つで、近年人気が急上昇しているという特徴を持ちます。比較的学習コストが低く情報量も多いため、初学者にとってもマスターしやすいフレームワークとなっています。 今後も将来性も期待が持てるため、今から学習を始めてみることをおすすめします。 テクフリでフリーランス案件を探してみる

Swift
Swiftの将来性について現状から踏まえて検証してみた
Swiftとは? SwiftとはLinuxやMacOS、iOSで動作するアプリ開発に用いられているプログラミング言語で、国内ではiPhoneなApple製品で動作するアプリ開発で特に需要があります。 Swiftが開発・発表されたのは2014年で、当初は開発者に対するベータ版の提供からスタートしました。2017年からは日本語への対応も発表されて2019年現在では多くの開発現場で用いられています。 テクフリでフリーランス案件を探してみる Swiftの特徴 SwiftはiPhoneアプリなどApple関連製品のアプリ開発には欠かせない言語ですが、安全でインタラクティブなどいくつかの特徴があります。ではここからは、Swiftの特徴について見ていきましょう。 直感的な開発が可能 SwiftはApple製品の開発のためにAppleによって作成されたプログラミング言語です。そのためAppleの代名詞でもある直感的な操作が、Swiftにも取り入れられています。 Xcodeを活用することでスムーズに、直感的なプログラミングの記述でアプリ開発に取り組むことができます。 コーディングをシンプルにできる Apple製品やMacOSのアプリ開発にはObjective-Cが多く活用されてきました。 SwiftはObjective-Cと比較するとセミコロンが不要であること、そして高速なコンパイラが採用されているという違いがあります。そのため、Objective-Cによるアプリ開発よりも、シンプルにコーディングできるという特徴があります。 開発環境の準備が簡単 他のプログラミング言語はテキストエディタなど開発環境の準備のためにインストールしなければいけないアプリケーションが複数ある場合が少なくありません。 しかし、SwiftはXcodeがあればすぐに開発をはじめることができます。 XcodeのダウンロードはMac App Soreから無料で実施できます。 初心者でも学びやすい環境(アプリ)が提供されている Swiftは初心者でも学びやすい学習環境が提供されています。プログラミングの記述がシンプルという特徴もあり、他のプログラミング言語と比べても習得のハードルは高くはありません。 Swift学習用のアプリとしては、iPad用アプリであるSwift Playgroundsがあります。Swift Playgroundsは、ゲーム形式でSwiftのコードの基本を学ぶことができます。Appleが開発したアプリのため、学習内容も信頼性が高くSwiftの初学者には有用なアプリだといえるでしょう。 Swiftの現状~給与と業界の動向について~ Swiftは比較的新しいプログラミング言語ではありますが、iPhoneやiPad、MacOSの開発に特化していることもあり多くの企業が活用しています。 またSwiftはAppleが開発したプログラミング言語であり、ロボットやドローンへの指示を出す際にも利用することができます。 シンプルで使いやすいという特徴もあるため、Swiftの需要は現状で充分にあり、今後もその需要は続くことが期待できるといえるでしょう。また、Swiftの技術を習得してからフリーランスエンジニアとして独立できれば月収は60万円~110万円程度が見込めます。 この報酬は弊社が提供しているマッチング案件提供サイトテクフリに掲載されているSwiftのスキルが求められるエンジニアの月額報酬です。 仮に月収が60万円であったとしても、年収としては720万円を稼ぐことができるからです。案件によって提示されている報酬には幅がありますが、エンジニアの月額報酬としては決して低い金額ではありません。 参考として経済産業省が公表している「IT関連産業の給与等に関する実態調査」では、Swift の技術を含むと考えられる、SE・プログラマ(ソフトウェア製品の開発・実装)の平均年収は603.9万円です。 Swiftの技術を身につけてフリーランスとして独立することができれば、平均以上の給与を稼ぐことができる可能性は充分にあるといえるでしょう。 Swiftの将来性~業界の動向について~ Swiftはシンプルにコードを記述できるだけでなく、書きやすいという特徴があり多くのエンジニアから指示されているプログラミング言語の一つです。 しかしGithubの公開ページに掲載されている「Top languages over time」には含まれていないプログラミング言語となるため、JavaScriptやPython、Javaと比べると人気は劣るといえるでしょう。 Top languages over timeではMacOSのアプリ開発で主要であったObjective-Cが2016年までランクインしていましたが、2017年からは10位以降のランク圏外となっていることが分かります。 2017年以降は徐々にObjective-CからSwiftへの切り替えを進めている企業があると仮定すれば、Swift の需要は今後伸びていく可能性は充分にあります。 またSwiftの技術の需要はiOS、MacOSのアプリ開発の需要ともある程度関係してくることが予想できます。Appleは日本国内でも絶大な人気がありますが、世界中からの一定の需要を獲得することに成功しています。 Apple製品の人気が今後も長期的に続く可能性について考慮すれば、Swiftの将来性は充分にあるといえるでしょう。 Swiftの将来性~給与について~ Swiftの将来性は充分にありますが、給与について相場が今以上に高騰することは期待できません。なぜなら現在のIT業界はエンジニアが不足しており、他の業界と比較しても比較的高い水準の報酬が既に用意されているからです。 実際にフリーランスとして独立すれば月額報酬が100万円を超えてくる案件を狙うことができます。 高い報酬を獲得するためにはそれなりのスキルと実績が必要ですが、ある程度Swiftの実務経験を重ねることができれば高い報酬を目指せる可能性は充分にあります。 このような給与面から見てもSwiftは将来性があると考えることができます。 また比較対象として経済産業省の「IT関連産業の給与等に関する実態調査」では、IT業界の職種別の平均年収が公開されています。 Swiftの技術が関連する職種だと考えられる盤設計担当/基盤アーキテクチャの年収は778.2万円。 SE/プログラマの年収は603.9万円です。 これらの年収からSwiftの技術を習得してフリーランスとして独立できれば、平均年収を上回る年収を目指せることが分かります。 まとめ:Swiftは将来性があるがAppleの動向に注意が必要 Swiftは将来性があるプログラミング言語であることに間違いはありませんが、Appleの動向への注意は必要です。 Swiftが普及してきたことで、Objective-Cの需要が下がったように新たなプログラミング言語が今後開発される可能性はゼロではないからです。 そのためSwiftのスキルを習得してエンジニアとして活躍する場合、ある程度Appleの動向に注意することが欠かせないといえるでしょう。 しかしプログラミング言語はある程度の基本を覚えてしまえば、同系統のプログラミング言語の習得のハードルはそこまで高いものではありません。 スマートフォンアプリ開発やiOSの開発経験をある程度重ねることができれば、仮にSwiftの需要が下がることがあったとしてもエンジニアとして活躍できる可能性は充分にあります。 Swiftの技術を身につけてエンジニアとして高い報酬を目指す場合は、ただ技術を磨くだけでなく市場の動向に合わせて必要なスキルを身につける、柔軟な視点も必要だといえるでしょう。 テクフリでフリーランス案件を探してみる

Go言語
Go言語の将来性は?年収データなどをもとにわかりやすく解説します
Go言語とは Go言語はGoogleが開発したプログラミング言語で、近年は日本でも注目度が高まっており、多くの企業が採用を検討しています。「Golang」とも呼ばれることがありますが、正式名称は「Go」です。本記事ではプログラミング言語であることを明確にするために、「Go言語」という表記を使用します。 Go言語の需要が高まっている一方で、Go言語を扱えるエンジニアの数は絶対的に不足していることも課題とされています。そのため、Go言語を習得することは、エンジニアとしての大きな強みになるでしょう。 Go言語の特徴 Go言語の特徴として、以下の3つについてご紹介していきます。 マルチパラダイムの次世代汎用言語 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)の2つです。 機械学習や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万円近い差をつけて堂々の一位です。労働市場で圧倒的な地位を占めるプログラミング言語だということがよくわかるかと思います。理由としては、2点挙げられます。 1点目は冒頭にも書きましたが、注目度が上がって事で企業側のニーズも高まっていますが、エンジニア数がまったく足りていません。需要と供給のバランスが崩れている状態のため、期待平均年収が高い傾向にあります。 ちなみに、どれくらいニーズが急拡大しているかというと、前回の2017年度版ランキング作成時は、「求人数が100件以下のため、その他の言語のひとつ」として扱われていたので、1年で22倍も求人数が増えたということになります。 2点目の理由は、Go言語は、大規模・複雑なWebサービス、プロダクトの開発が得意と紹介しましたが、「大規模・複雑なWebサービス、プロダクトとは、付加価値が高く、高単価が見込める開発案件」とも言えます。つまり、高単価案件が揃っているのに、応募者も少ないため、さらに高い報酬金額を提示するクライアントが多い、という訳です。 Go言語の将来性 Go言語の将来性、今後の展開ですが、先ほどご紹介した求人数の増加からもお分かりの通り、今現在、まさに飛ぶ鳥を落とす勢いで成長しています。 Googleとのサービスの親和性が高く、大規模・複雑なWebサービス、プロダクト開発で多くの実績を持っており、“サーバーサイド言語として確かな地位を築きつつあるため、非常に将来性のあるプログラミング言語であるのは間違いありません。 ただし、JavaやPythonなどの言語も引き続き人気があります。また、さらには上で紹介した求人情報集計で第二位に入ったScalaのようなJVM(Java仮想マシン)言語も存在感を高めているのは、Go言語の将来性という意味では、少しネガティブな要素かもしれません。 おそらく、Web業界では発展性や効率性からGo言語が好まれる一方で、過去のシステムを保守・拡張することが多いSIer業界では、これまで開発してきたJavaと共存できるJVM言語の方が好意的に受け止められると思われます。 もっとも、得意・不得意があり、「ある分野ではよく使われるが、他の分野ではまったく使われない」というのは、どのプログラミング言語でも起こることなので、あまり気にしなくても良いでしょう。 年収については、エンジニア数が増えたことで需要と供給のバランスが補正され、期待平均年収も下がる可能性はあります。しかし、Go言語のエンジニアの増加(供給)に対して、企業側のニーズの拡大(需要)が上回る状況が今後も続くと推測されるため、当面は、現在の水準を維持するものと思われます。 まとめ 何度もお伝えしたことですが、IT業界の巨人Googleが開発し、大規模・複雑なWebサービス、プロダクト開発で多くの実績を持っているのがGo言語です。ベテランエンジニアの中にはGo言語のシンプルさを嫌う人が多いのも事実ですが、着実に利用シーンが拡大しています。日本でもWeb系IT企業を中心に採用が増えており、十分、将来性が期待できるプログラミング言語です。 まだまだ日本語の書籍やインターネット情報が少なく、独力でGo言語を学ぶのはやや難しいかもしれません。しかし、すでにWeb系で活躍している方、今後Web系で活躍したい方には、ぜひ習得を目指していただきたいプログラミング言語です。 テクフリでフリーランス案件を探してみる

働き方
アプリケーションエンジニアの将来性は?年収などについても解説します
アプリケーションエンジニアはWebサービスや業務システム、スマホアプリなどのソフトウェアを設計・開発・運用するエンジニアです。企業の業務効率化を支えるシステムから、私たちの日常生活を便利にするアプリまで、幅広い分野で活躍しています。 本記事ではアプリケーションエンジニアの具体的な仕事内容や必要なスキル、年収などについて詳しく解説します。これからアプリケーションエンジニアとしてのキャリアに関心のある方はぜひ参考にしてみてください。 テクフリでフリーランス案件を探してみる アプリケーションエンジニアとは アプリケーションエンジニアは、ChromeやFirefox、SafariといったWebブラウザ上で動作する「Webアプリ」の開発を手がける職種です。 TwitterやGmailなどのサービスは、PCに何らかのソフトウェアをインストールしなくても動作します。このようなサービスの開発が、Webアプリエンジニアが活躍するメインフィールドです。 Webアプリは、PCはもちろんスマホ・タブレットにも対応することができ、端末を選ばず利用できるのが強みの一つ。iOSアプリはiPhoneやiPad、AndroidアプリはAndroid端末でしか使えませんが、Webアプリの場合はOSに依存することなく使えるのがメリットです。 逆にインターネット環境がないと表示すらできないというデメリットは存在しますが、5G回線が実用化段階に入っている昨今では重大な欠点とはならないでしょう。ネイティブアプリと違って活躍の場が広いことから、今後も重宝される人材と考えることができます。 アプリケーションエンジニアの業務内容 アプリケーションエンジニアの仕事は、要件定義やサイトの設計からスタートします。「ユーザーがどんな機能を求めているのか?」「クライアントはどんなデザインを希望しているのか?」をもとにしながら、システム設計を施します。 もちろんWebアプリの開発にも携わります。時には企業内限定の業務系Webアプリを手がけることもあり、クライアントとの綿密なやり取りを交わすヒューマンスキルが重視される職種でもあります。 顧客の要望を正確に反映したWebアプリをつくるためには、顧客の抽象的な経営課題や不安・問題に対してヒヤリングを重ね、具体化・細分化していく必要があります。 一つひとつの課題を多角的な視点から精査し、問題解決に導くソリューションを渡すのがWebアプリエンジニアの使命です。 時にはクライアントと技術部門との橋渡し役となることもあり、対人折衝能力は不可欠と言えます。責任が大きくプレッシャーもかかる立場ではありますが、エンジニアとしての業務を通じて経営者視点で考えるスキルを培えることは、この仕事のメリットの一つです。 開発したWebアプリを運用・保守することも、アプリケーションエンジニアの大切な役割の一つ。時には専門知識を活かして営業チームを支えるフィールド・アプリケーション・エンジニア(FAE)や、営業・マーケティング分野を支援するコーポレート・アプリケーション・エンジニア(CAE)としての活躍を求められることもあるでしょう。 アプリケーションエンジニアに必要なスキル・資格 Webアプリエンジニアに求められるのは、ハード・ソフトウェアの専門知識や、ネットワーク・データベースに関する深い理解です。 ユーザビリティに優れ、セキュリティ面でも信頼の置けるシステムを構築する必要があるため、幅広い分野のスキルが求められます。 Webアプリ開発においては、HTML5・CSS3・JavaScriptといったフロントエンド言語がメインで用いられます。Java・PHPなどのバックエンド言語も必要で、業務系アプリではJava、C、C#の知識も必要になるでしょう。 Webアプリエンジニアになるための必須資格はありませんが、以下のような資格を取得し、スキルアップを図ることで転職の成功率や独立後の成果に直結してくるはずです。 ドットコムマスター Webプログラミング能力検定試験 システムアーキテクト試験 アプリケーションエンジニアが学ぶべきスキル 未経験からアプリケーションエンジニアを目指すなら、まずはWebアプリ開発に関する書籍で基礎知識を身につけるとよいでしょう。アプリ開発者向けの講座やセミナーを受講することも、エンジニアとしてのキャリアに直結してくるはずです。 プログラマーやシステムエンジニアからのステップアップを考えるなら、フロントエンドをはじめとするプログラミング言語はもちろん、データベースに関する知識を身につけておくと、エンジニアとしての信頼度が高まります。 さらに市場価値の高いエンジニアを目指すなら、クライアントの課題を解決に導くソリューション提案に長け、社内メンバーや顧客とのコミュニケーションに秀でた対人折衝能力を身につけていることが望ましいです。 コミュニケーション能力は、アプリケーションエンジニアだけでなくIT業界では必須のスキル。技術を磨くのも悪いことではありませんが、チームの仲間と積極的に関わり、クライアントの希望を汲み取るトレーニングを重ねるなどの努力が仕事の成果にも直結してきます。 また、Windows系だけでなく、UNIX・LinuxといったOSに関する知識を深めておくと、より活躍の幅が広がるはずです。アプリケーションエンジニアを目指したいと考えるなら、要件定義〜設計〜開発〜運用まで総合的なスキルを身につけられるシステムエンジニアとして、まずは腕を磨くことをおすすめします。 テクフリでフリーランス案件を探してみる アプリケーションエンジニアの年収相場 アプリケーションエンジニアは、ほかのエンジニアやプログラマーと比べて高度なスキルを要求される専門性の高い職種でもあります。このことから年収水準は比較的高めで、20代から400万円を手にできるところもあります。 30代には500万円、40代になれば600〜700万円といった年収が見込まれます。プロジェクトマネージャーやコンサルタントにキャリアアップできれば、大台の1,000万円に到達することも十分に考えられます。 ただしこれは企業に勤めた場合の数字ですので、フリーランスとして独立し、成果主義の色が濃くなればなるほど年収は青天井となっていきます。それ相応のスキルや実績は求められるものの、平均的な年収以上の報酬を手にしたいなら、フリーのエンジニアという道を選ぶことも有力な選択肢の一つです。 アプリケーションエンジニアが活躍できる業界 アプリケーションエンジニアはさまざまな分野で重宝される存在ですので、一つの業界に限らず活躍することが可能です。 たとえば、電子部品・半導体といった製造業でも求人募集があり、営業部門をサポートするフィールド・アプリケーション・エンジニアが特に歓迎されます。CAD関連の会社では、営業・マーケティングにも携わるコーポレート・アプリケーション・エンジニアの人材が多く募集されています。 どんな業界でも求められる役割は同じで、技術面と営業面での活躍が期待されています。したがって、開発言語のほかコミュニケーションスキルやコンサルタントとしての知見が備わっていると、市場価値の高い人材となることができるでしょう。 【まとめ】アプリケーションエンジニアは将来性が高い 専門性の高いアプリケーションエンジニアは、将来性が高く、これからのAIやIoTの分野でも広く求められる人材と考えられます。若いうちからWebアプリ開発を目指してスキルを磨くことで、今後必要とされ続ける人材となることも不可能ではありません。 今後のキャリアパスの参考として、Webアプリエンジニアという職種の仕事内容・役割や、待遇、学ぶべきスキルを覚えておきましょう。 テクフリでフリーランス案件を探してみる

freelance
テスター
テスターとは?IT未経験でも可能!年収・スキル・将来性を徹底調査
テスターとはシステムやアプリケーション、IT製品が正常に動くかをテスト・評価するエンジニアのことを指します。想定されるケースを洗い出し、テストを行うことでプログラムやデータベースの設計ミス、プログラム中のバグを発見し、製品の品質を向上させるのが役割です。本記事では、テスターの年収や求められるスキルについて詳しく解説します。 テクフリでフリーランス案件を探してみる テスターの仕事内容 テスターの仕事は大きく以下の4つに分けられます。 テスト計画 テスト設計 テスト実施 結果の分析 それぞれの仕事内容について、詳しく見ていきましょう。 テスト計画 テスト計画は、テストの目的を決めて、そこから実施期間や人員配置、テスト完了の基準などを決めることです。ソフトウェア開発プロセスにおいて重要なステップと言えます。ソフトウェアが要求仕様を適切に満たしているか、バグやエラーが最小限に抑えられるかどうかなど、テストによって達成したい結果を示す必要があるでしょう。 また、実施期間と人員配置の計画も重要です。テストの実施には時間とリソースが必要であり、開発チームと連携しながら、適切な期間と適任のテスターを配置しなければなりません。これにより、テストのスケジュールやリソースの予算を効果的に管理することができます。 テスト設計 テスト設計では、テスト計画をもとにして、用いるテスト技法やテストケースの洗い出しを行います。 設計がきちんとされていないと、質の高いテストを実施できないので、緻密なテストケースの洗い出しはとても重要な業務です。テスト設計の過程では、ソフトウェアの仕様や要件を詳細に理解し、それに基づいて適切なテストケースを考案しなければなりません。 異なるテスト技法を適用することで、さまざまな観点からソフトウェアを検証し、隠れたバグを見つけることが可能です。また、緻密なテストケースの洗い出しは、ソフトウェアの機能やバグをカバーし、品質を向上させることができます。 テスト実施 テストの実施では、設計されたテストケースを実施します。必要に応じてエビデンスを残しながら、想定どおりにプログラムや電子機器が作動するかをチェックしていきます。IT未経験からテスターになった場合は、この業務からスタートすることが大半です。テストの実施ではエビデンスを残すことが重要であり、問題が発生した際に原因を特定するための手がかりとなります。 また、テストの過程で予想外の挙動やエラーが発見されることもあり、これを改善することは、ソフトウェアの品質をより良くすることにつながるでしょう。テスト実施は品質保証をする上で核となる業務であり、ソフトウェアの信頼性や品質を向上させるために不可欠です。 結果の分析 テストの結果をまとめて文書化し、結果の分析、報告を行います。テストプロセスにおける、最後の重要な項目です。まずは、テスト実施後、得られたデータや情報を整理していきます。ここでは、実施したテストケースごとの結果やエビデンスを集め、バグの発見状況やテストのカバレッジなどを明確にまとめることが求められるでしょう。 次に、結果の分析が行われます。これには、発見したバグの優先度や深刻度を評価しなければなりません。バグの影響度や再現性を考慮しながら、修正が最も必要なものから順に優先順位を付けます。また、テストの実行結果から、ソフトウェアのパフォーマンスや安定性の向上点を抽出し、今後の改善に役立てることも重要です。 テスターとQAエンジニアとの違い テスターは、QAエンジニアとは異なる役割を持っていることを覚えておきましょう。QAエンジニアは、ソフトウェアの品質を向上させるために、開発プロセス全体の監視や品質に関する戦略立案などを担います。また、テスト計画の作成やテストケースの設計、テスト実行の管理などを担当し、ソフトウェアの品質に対する総合的な視点が必要です。 一方、テスターはソフトウェアの動作をテストすることに特化している職種となります。テストを通じて、ソフトウェアの機能や性能、セキュリティなどを評価し、バグや問題を発見しなければなりません。このように、QAエンジニアはソフトウェアの品質を総合的に管理し、開発プロセス全体を監視する役割を果たし、テスターは具体的なテスト実行を担当する役割を持ちます。 テスターの年収 テスターの平均年収は370万円前後とされています。また業務範囲がテスト実施のみに限定されるケースも多いため、新入社員やIT未経験者が担当することも多く、SE(平均年収550万円)やプログラマー(平均年収416万円)よりも平均年収は低い状況です。 しかし、スキルアップしてテストの実施だけでなく、マネージメントやテスト計画の立案・分析、テスト結果を元にしてバグの修正などができるようになれば年収500万円以上を狙うことも可能となります。 参考:厚生労働省「令和4年 賃金構造基本統計調査」 テクフリでフリーランス案件を探してみる テスターに求められるスキル テスターにも求められるスキルは多岐に渡ります。ここでは、代表的な3つのスキルについて、確認していきましょう。 OAスキル テストや評価した結果を集計したり、レポートにまとめる必要があるので、オフィスソフトを使った文書作成能力がテスターに求められます。具体的には、Excelを使ったデータ集計やグラフ作成、Wordを使ったレポートの作成、PowerPointを使ったプレゼンテーションの作成などです。 これらのOAスキルを持つことで、テスターは効率的なレポート作成や結果の可視化が可能となり、プロジェクトの進行や意思決定をサポートすることができます。また、レポートのフォーマットやレイアウトの整備も重要であり、OAスキルを活かしたデザインや表現力のある文書作成があるも必要となるでしょう。 集中力 テスターの業務には細かなテスト作業が含まれることもあり、ミスを避けるためには高い集中力が求められます。繰り返しのテスト作業を黙々と行い、細部にわたる確認や検証が必要です。 例えば、テストケースの網羅的な実施や複雑なデータの入力や検証、バグの再現手順の確認など、細やかなタスクを正確にこなすためには高い集中力が欠かせません。 また、テスターは長時間にわたって同じ作業を行うこともあり、集中力を持続させることも重要となります。 ITに関するスキル ITに関するスキルを持つことは、テスターにとって非常に重要です。なぜなら、テストを行う対象は主にシステムやアプリケーションであるため、システム開発やパソコン、デジタル機器に関する知識が必要になるからです。テスターに欠かせない、テストツールやデバッグツールの使用方法だけでなく、プログラミング言語の基礎知識、データベースの基礎知識なども身につけておくとよいでしょう。 テスターに向いている人 テスターに向いているのは、細かい箇所への注意力があり、論理的思考と問題解決能力に長けた人です。ソフトウェアやシステムの動作に対する好奇心と疑問を持ち、その挙動を深く理解しようとする姿勢が求められます。 また、ユーザーの視点を大切にし、製品がどのように使われるかを理解しようとする姿勢も重要です。一方で、コミュニケーション能力もテスターには不可欠と言えるでしょう。開発チームとの協力やバグ報告の際に、適切な情報を正確に伝えなければならないからです。 さらに、時間管理や優先順位付けができるという点も重要な項目です。テスターは複数のタスクを同時に管理し、テストの進捗状況を把握するために計画的に業務を遂行することも必要になります。このように、テスターに向いている人は、様々な特徴があり、多くのことが求められていると言えるでしょう。 テクフリでフリーランス案件を探してみる テスターに関連する資格 テスターとしてステップアップするために取りたい3つの資格をご紹介します。 JSTQB認定テスト技術者資格 JSTQB(Japan Software Testing Qualifications Board)が実施するソフトウェアのテスト評価技術を認定する資格です。海外でも有効な国際資格となっています。試験のレベルは基礎的なレベルのFoundation Level と、上級レベルのAdvanced Levelの2つがあり、Advanced Levelの種別はテストマネージャーとテストアナリストの2つです。Advanced Levelの資格を受験するには、Foundation Levelの試験に合格していることと3年以上の実務経験が必要になります。 参考:JSTQB認定テスト技術者資格 IT検証技術者認定試験(IVEC) 一般社団法人IT検証産業協会(IVIA)が実施するテストエンジニア向けの資格です。テストエンジニアの実務力を認定する試験となります。テスト実行者レベルのレベル1から上級コンサルトレベルのレベル7まで7つのレベルに分かれている試験形式です。レベル3以降は下位資格の合格が受験資格となっています。 参考:IVEC認定試験 ソフトウェア品質技術者試験 一般財団法人日本科学技術連盟が実施する、ソフトウェアの品質向上に関する提携的な知識を問う認定試験です。現在、初級と中級の2つのレベルがあり、上級については今後作られる予定になっています。 参考:ソフトウェア品質技術者試験 テスターが活躍できる業界 システム開発だけではなく、Web業界やアプリ・ゲーム開発、製造業など幅広い業界での活躍が期待できるでしょう。テスターが活躍する企業にはいくつか種類があります。 メーカーなどから受託されてテストを行う企業 カメラやプリンター、半導体などの電子機器に関して、メーカーから受託を受けてテストを実施します。 システム開発、Web開発、アプリ開発をする企業 システム開発やソフトウェア開発を手がける企業で、SEやプログラマーと協力してテスト業務を実施します。テスト業務は、新卒や未経験で入社したSEやプログラマーが担当することもあるでしょう。 テストを専門に行う企業 システム開発やソフトウェア開発では、品質保証の観点から開発者以外の人がテストを行う、第三者検証とよばれるテストが行われるケースが少なくありません。 テストを専門に行う企業では、この第三者検証を行います。 テスターの将来性 AIの発達はシステム開発にも大きな影響を与えています。デザインやコーディングなど、今までエンジニアが担当していた業務がAIに置き換わるケースが増加中です。テストエンジニアの仕事に関してもAIが影響を与えはじめており、そのうちのひとつにテストの自動化が挙げられます。 エンジニアがテストを行う場合は、何千ケース、何万ケースという膨大なテストを行うことは実際には困難です。なので今まではその中から重要なケースを抽出してテストを行っていました。しかし、AIでテストを自動化することで膨大なケースのテストを実施することが可能になっています。 テクフリでフリーランス案件を探してみる テスターのキャリアパス 初級のテスターからの主なキャリアパスには次の3つがあります。どのキャリアパスを選ぶかにより、業務内容が大きく変わるので、しっかりと確認しておきましょう。 スペシャリスト スキルや経験の浅いテスターではテストの実施が主な業務になりますが、スキル・経験をつけてスペシャリストになるとテストの計画、設計、結果の判定、報告などが主な業務となるでしょう。質のよいテストを行うためには、緻密なテスト計画・設計が必要となるので、高いスキルや知識が必要になります。 テストマネージャー テストマネージャーはテストチームを統括し、テストが計画通りに進行するように監督する仕事です。また、クライアントへのヒアリングや協力要請が必要な場合もマネージャーの業務となります。 テストアナリスト テストアナリストは、システムや製品を深く理解し、どのようなテストが必要なのか定義したり、テスターが作成したテスト計画やテスト設計のレビューを行います。テストに関する高い知識やスキルの他に、システムや電子機器に関する知識も求められる職種です。 現状、AIで実現が難しいと言われている領域は「マネジメント」「テスト計画立案」「テスト結果の分析」といった領域となります。このような領域のスキルを身に着けて、マネージャーやアナリストとして活躍することがテスターとして生き残る戦略になるでしょう。 まとめ テスターはシステムやソフトウェア、電子機器の品質保証のために必要な職種です。IT未経験でも比較的転職しやすい職種ではありますが、スキルアップをすることで求められるエンジニアになれる職種でもあります。 資格なども取得しながらAIでは実現が難しい領域の知識・スキルを高めていくことが、テスターとして長く働くためには必要になるでしょう。 テクフリでフリーランス案件を探してみる

freelance
スクラムマスターの役割とは?初心者向けにわかりやすく解説
スクラムマスターとは スクラムマスターは、アジャイル開発手法のひとつである「スクラム」を効果的に運用するための中心的な存在です。チーム全体がスクラムの理論や原則を正しく理解し、それを日々の業務に活かせるよう支援する役割を担います。スクラムマスターには、スクラムの基本フレームワークだけでなく、アジャイル開発の背景などについての深い理解が求められます。 本記事ではスクラムマスターの役割や求められるスキルなどについて、わかりやすく解説します。 テクフリでフリーランス案件を探してみる スクラムマスターの仕事内容 スクラムマスターの主な役割は、スクラムチームが効率的かつ効果的に動ける環境を整え、サポートすることです。単なる管理業務にとどまらず、チーム全体のパフォーマンス向上と成長を促進するという点で非常に重要なポジションと言えるでしょう。日々の業務では多岐にわたるタスクを管理し、チームが直面する課題を解決することでプロジェクト全体を円滑に進める役割を担います。 さらに、スクラムマスターは単純に課題を解決するのではなく、チームが自ら問題を特定できるように導くことも求められます。以下ではスクラムマスターの具体的な仕事内容について、いくつかの重要な観点からさらに詳しく解説します。 スクラムイベントの管理 スクラムマスターの重要な役割のひとつに、スクラムイベントを効果的に管理・運営することが挙げられます。スクラム開発においてはスプリント計画、スプリントレビューなどのイベントが存在し、それぞれがプロジェクトの進行や改善において重要な意味を持ちます。効果的なスクラムイベントの管理は、チームの一体感を高めるだけでなく、プロジェクト全体の目標達成に向けた推進力を生み出すのです。 チームのサポートとコーチング スクラムマスターは、チームが高いパフォーマンスを発揮できるようにサポートする役割を担っています。チームメンバーが自主的に動くようにするためには、個々のメンバーの成長を促進することが非常に重要です。そのため、スクラムマスターは単なる管理者ではなく、コーチとして寄り添いながらチームを導くことが求められます。 また、スクラムマスターはチーム間のコミュニケーション促進にも積極的に関与します。スクラムチームは複数のメンバーから構成されるため、メンバー間の円滑なコミュニケーションはチームの成功に不可欠です。スクラムマスターは、メンバーが互いに情報を共有し、意見を交換できる環境を整えます。例えば、定期的な1対1のミーティングを通じて個別の悩みを聞いたり、チーム全体でのディスカッションを円滑に進めたりします。コミュニケーションが強化されることで、チーム内の信頼関係が深まり、より協力的な働き方が生まれます。 プロセス改善の推進 スクラムマスターは、チームと共にプロセスを定期的に分析し、改善を推進する役割を担っています。スクラムはアジャイルな開発手法であるため、プロセスの改善が継続的な進歩に直結します。そのため、スクラムマスターは、現状のプロセスを常に見直し、最適化を目指して努力し続けることが求められます。 プロセス改善は単なる技術的な作業にとどまらず、チーム全体の文化や働き方にも大きな影響を与えます。スクラムマスターは、改善を行う際にメンバーの意識や習慣を変えることにも注力します。定期的な振り返りやペアプログラミングなどを通じて、チーム内の協力と学びを深めることもあります。このような改善活動が定着することで、チームはより柔軟に、かつスピーディに変化に対応できるようになります。 障害物の除去 チームの進行を妨げる障害物を迅速に特定して解消することも、スクラムマスターの重要な役割です。 具体的な例としては、コミュニケーションの不足などが挙げられます。チーム内での情報共有が不十分な場合、進捗状況や課題が明確に伝わらず、認識のズレが生じてしまいます。これを解決するために、スクラムマスターはチームメンバー同士のコミュニケーションを円滑にし、情報が適切に共有されるようサポートします。 また、外部からの干渉もチームにとって大きな障害となります。例えばステークホルダーや他の部署からのリクエストが頻繁に入ることで、チームが本来の目標に集中できなくなるケースが考えられます。スクラムマスターは、こうした外部との調整役としての役割も担い、チームが優先すべき業務に集中できるようにリソースの確保や外部の要求の調整を行います。 テクフリでフリーランス案件を探してみる スクラムマスターとプロジェクトマネージャー(PM)との違い スクラムマスターとプロジェクトマネージャー(PM)の役割は似ていますが、異なる部分もあります。 プロジェクトマネージャー(PM)は、プロジェクト全体の進行管理を担当します。PMはプロジェクトのスケジュール、予算、リソース配分、品質管理など、プロジェクト全体の管理を行い、目標達成を最優先します。プロジェクトの進捗をモニタリングし、リスク管理や調整を行い、問題が発生した場合には迅速に対処します。また、ステークホルダーやクライアントとのコミュニケーションも担当し、プロジェクトが計画通りに進行するようにリーダーシップを発揮します。 一方でスクラムマスターは、チームのプロセス管理と支援に特化した役割を担います。スクラムマスターは、スクラムフレームワークが効果的に機能するようにサポートし、チームメンバーが自律的かつ効率的に仕事を進められるように導きます。彼らの主な仕事はスクラムイベントの進行をサポートし、チームの生産性を最大化することです。 どのように作業を進め、どのようにコミュニケーションを取るべきか、どのように課題を解決するかに焦点を当て、チームがより効率的に作業できる環境を整えます。スクラムマスターは、チームの「ファシリテーター」や「コーチ」としての役割が強調されます。 スクラムマスターとPMは互いに補完し合う関係であり、役割を明確に理解して協力することでプロジェクトを成功に導くことができます。PMがプロジェクト全体の進行とリソース管理を担当し、スクラムマスターがチームのプロセスを最適化することで、最終的な成果物の質が向上し、チームの生産性も高まるでしょう。 プロジェクトマネージャーについては以下の記事でも詳しく解説しています。 プロジェクトマネージャーの将来性は? 年収など徹底調査! スクラムマスターに必要なスキル スクラムマスターとして活躍するためには、単なる知識だけでなく、プロジェクトの成功を支える実践的なスキルが求められます。ここでは、スクラムマスターに必要とされる専門知識や、リーダーとしての能力について具体的に解説します。 スクラムに関する専門知識 スクラムマスターは、スクラムの基礎的な概念やイベント、役割について深く理解している必要があります。 また、これらをチームやステークホルダーにわかりやすく説明し、実践を支援する能力が求められます。この専門知識が、チームを効率的に運用し、成功へ導く原動力となります。 ファシリテーションスキル 会議を円滑に進行し、全員が意見を共有しやすい環境を作り出す能力が重要です。特に対立が生じた際には、中立的な立場から問題を解決し、合意形成を促進します。 優れたファシリテーションスキルを持つスクラムマスターがチームを率いれば、チームは建設的な議論を行うことができるでしょう。 リーダーシップ スクラムマスターは命令型ではなく、支援型リーダーシップを実践します。メンバーが自主的に課題に取り組めるよう支援し、信頼関係を築きます。また、プロジェクト外のステークホルダーと連携し、チームが必要なサポートを受けられるよう調整する役割も果たします。 スクラムマスターに関連する資格 スクラムマスターとしてのスキルを証明する資格には「Certified ScrumMaster(CSM)」や「Professional Scrum Master(PSM)」があり、スクラムの理論と実践力を体系的に習得することに役立ちます。資格取得者は、スクラムフレームワークの活用法についての認知度が高まり、キャリアの幅を広げるチャンスが増えるでしょう。 最後に スクラムマスターは、アジャイル開発における中心的な存在として、チームの支援とプロセス改善を担う重要な役割です。プロジェクトマネージャーとの違いや必要なスキル、資格などを理解することで、この役割の重要性と可能性をより深く認識できるでしょう。 テクフリでフリーランス案件を探してみる

freelance
ペアプログラミングのメリットと注意点を解説
ペアプログラミングとは ペアプログラミングは、2人のプログラマーが1台のコンピュータを共同で使用し、プログラムを作成する手法です。通常、1人が実際にコードを記述する「ドライバー」として作業し、もう1人がその進行を見守り、サポートや方向性を示す「ナビゲーター」としての役割を果たします。 双方がリアルタイムで意見を交わしながら進めるため、即座にフィードバックを受けることができ、問題解決のスピードが向上します。従来はウォーターフォール型開発における方法論として発展しましたが、現在ではアジャイル開発において利用されることもあります。 テクフリでフリーランス案件を探してみる ペアプログラミングのメリット ペアプログラミングには多くの利点があります。ペアで作業を行うことで課題を迅速に解決できるため、プロジェクトの進行がスムーズになります。また、相互の知識の共有が進み、特に新人が経験豊富な開発者から学ぶ機会が増えます。 2人が一緒に作業することでレビューを即座に行うことができ、バグの発生を未然に防ぐことが可能です。これらの要素が組み合わさることで、開発チーム全体の結束力やモチベーションの向上にもつながります。ここではそれぞれのメリットについてさらに詳しく解説します。 学習効果の向上 ペアプログラミングでは、異なる経験や知識を持つプログラマー同士が協力するため、学習効果が高まります。特に初心者は、経験豊富な開発者からのフィードバックを受けながら作業を進めることができ、スキルを短期間で向上させることが可能です。 また、相手のコーディングスタイルや問題解決のアプローチを観察することで、幅広い視点や新たなテクニックを吸収できるでしょう。さらに、ペアでの作業を通じて気軽に質問を投げかけることができれば、知識の深化が促進されます。 このようにペアプログラミングは個々の成長を促進することで、チーム全体の技術力向上にも寄与します。 コードの品質向上 2人のプログラマーが同時に作業することで、リアルタイムでコードレビューが行われます。この素早いフィードバックにより、潜在的なバグや設計上の問題を早期に発見して修正できるため、品質が保たれます。 また、ドライバーとナビゲーターが異なる視点からアイデアを出し合うことで相乗効果が生まれ、より洗練された設計や効率的な実装が可能となります。さらに、コードの共有意識が促進され、チーム全員がプロジェクト全体のクオリティに責任を持つ体制が整えられます。 コミュニケーションスキルの向上 ペアプログラミングは単にコードを書くだけでなく、チームメンバーとのコミュニケーションを密にすることで、様々なスキル向上に繋がります。2人で行う開発作業では、常にコミュニケーションを取りながら進めていく必要があります。 互いの考えを共有しながら意見交換を行い、より良い解決策を探していく中で、エンジニアとして必要とされるコミュニケーション能力が自然と磨かれていくでしょう。 テクフリでフリーランス案件を探してみる ペアプログラミングのデメリット ペアプログラミングは、ソフトウェア開発において高い効果を発揮する手法として注目されていますが、万能な手法ではありません。メリットだけでなく、デメリットも理解しておくことが重要です。以下では、ペアプログラミングの導入を検討する際に知っておくべきデメリットについて詳しく解説していきます。 人的コストが増える 2人のエンジニアが同じタスクに同時に取り組むため、単純に換算すると人的コストが2倍になります。効率化を図ることができれば全体的なコストを削減できるかもしれませんが、大規模プロジェクトや短期的な開発プロジェクトでは、人的コストの増加が大きな負担となる可能性もあるため注意が必要です。 また、ペアを組むエンジニアの選定や、ペアの入れ替えなど、運用面でのコストも十分に考慮する必要があるでしょう。 コミュニケーションのハードルが高い ペアプログラミングでは、常にコミュニケーションを取りながら作業を進めるため、円滑なコミュニケーションが不可欠です。 しかし、性格の合わないペアや、コミュニケーションスキルが低いメンバーがいる場合、意見の対立や誤解が生じやすく、作業効率が低下する可能性があります。また、リモートワーク環境下では、リアルタイムなコミュニケーションが難しく、さらにハードルが上がります。 スケジュール管理が難しい 2人のエンジニアのスケジュールを調整する必要があるため、プロジェクト全体のスケジュール管理が複雑になります。複数のペアが同時に作業を行う場合などは特に、スケジュール調整が困難になり、プロジェクトの遅延につながる可能性があります。 また、ペアの入れ替えが発生した場合もスケジュールを再調整する必要があり、柔軟な対応が求められます。 ペアプログラミングにおける注意点 ペアプログラミングを成功させるためには、いくつかの注意点が存在します。以下ではペアプログラミングを導入する際に知っておくべき注意点について詳しく解説していきます。これらの点を理解することで、より効果的にペアプログラミングを取り入れ、開発の効率化を図ることができるでしょう。 沈黙をなるべく避ける ペアプログラミングでは、常にコミュニケーションを取りながら作業を進めることが重要です。しかし、疑問点や不明な点があっても、それを口に出せないために、作業が滞ってしまうことがあります。 疑問点をすぐ相手に共有して一緒に解決することでより深い理解につながり、効率的な開発が可能になります。沈黙が続いている場合は、積極的にコミュニケーションを取るように心がけましょう。 特にコードレビューの際や新しい機能を実装する際などは、こまめに意見交換を行うことで、誤解を防いで質の高いコードを作成することができます。 疑問はすぐに共有する 疑問点や不明な点が生じた場合は、すぐに相手に共有しましょう。疑問点を放置すると誤った理解に基づいた実装をしてしまい、後から大きな問題に発展する可能性があります。 また、疑問点を共有することで、ペアのメンバーから新たな視点や解決策を得られることもあります。技術的な概念やコードの動作原理について疑問がある場合は、積極的に質問することで知識を深めることができます。 こまめに休憩を取る 先述の通り、ペアプログラミングにおいては常にコミュニケーションを取る必要があることから、通常の業務よりも疲労度が高くなることが考えられます。 疲労が蓄積してしまうと集中力が低下してミスが増え、本末転倒となってしまいます。こまめに休憩を取り、ストレッチなどで適度に体を動かすことで、リフレッシュを行いましょう。ペアで一緒に休憩を取ることで、有意義な意見交換の時間にしながらコミュニケーションも円滑になっていきます。 まとめ ペアプログラミングは、コードの品質向上、知識の共有、チームワークの強化といったメリットがある一方で、人的コストの増加やコミュニケーションの難しさといったデメリットも存在します。 効果的に実施するためにはコミュニケーションを密にし、疑問点をすぐに共有することが重要です。また、作業環境を整え、こまめな休憩を取りながら、ペアの組み合わせにも注意を払う必要があります。ペアプログラミングは万能な手法ではありませんが、適切に実施することで、より良いソフトウェア開発を実現できるでしょう。 テクフリでフリーランス案件を探してみる

Swift
Swiftのフレームワークおすすめ7選【2025年版】
Swiftは、Appleが開発したiOS向けオープンソースのプログラミング言語です。使用者が多いこともあって、フレームワークも多数存在しています。そのため、 「Swiftのフレームワークって何があるの?」 「たくさんあってどのフレームワークを使えばいいかわからない…」 といった疑問をお持ちの方もいるでしょう。そこで、この記事ではSwiftのフレームワークについて解説していきます。最後まで読んでいただければ、どのフレームワークを学習すれば良いかわかります! テクフリでフリーランス案件を探してみる Swiftフレームワークを利用するメリット Swiftを使う上でフレームワークを利用するメリットとして、以下が挙げられます。 開発スピードが上がる コードの統一性を保持(多人数開発にも対応しやすくなる) バグの減少 フリーランスとして仕事が取りやすくなる という4点のメリットについて紹介していきます。 開発スピードが上がる MVP開発やリーンスタートアップという言葉が注目されているように、IT/Web業界では特に、サービスを高速で市場に投下することが重要です。Swiftのフレームワークを利用するのとしないのでは、開発スピードにかなりの差が生じます。 例えばSwiftのフレームワークには、スマートフォン向けアプリから、macOSまでさまざまな規模の開発機能が備わっています。それらをフレームワークなしでエラー無く完成させるには、かなりの時間を要してしまうのです。 コードの統一性を保持(多人数開発にも対応しやすくなる) プログラミングに限らず全ての仕事にいえますが、コードの書き方にはその人の個性やクセがでます。経験、スキル、年齢、性格、キャリアなど様々な要因によって差が生じるのですが、人が書いたコードを修正するのは、かなり大変な作業です。フレームワークを利用すれば、コードの統一性を保持させることができます。統一性を保持することにより、多人数開発にも対応しやすくなります。 バグの減少 Swiftのフレームワークは基本的に大人数のエンジニアに利用されています。そのため、バグはすでに解決されていることが多いです。それらのバグが少ないフレームワークを利用して開発を進めると、開発をしたプログラムもバグが少なくなる可能性が高まるといえます。 フリーランスとして仕事が取りやすくなる Swiftの中規模、大規模以上案件では、フレームワークが利用されていることがほとんどです。特にPerfectやExpressは人気のフレームワークとなっているため、Swiftエンジニアとして仕事を獲得したい場合、習得しておくといいかもしれません。 テクフリでフリーランス案件を探してみる Swiftフレームワークを使用するデメリット 一方で、Swiftフレームワークを使用することのデメリットは次の2点が挙げられます。 学習期間が必要 イレギュラーに対応できないことがある 詳しく見ていきましょう。 学習期間が必要 フレームワークを使いこなすにはSwiftの理解がある前提で、最低でも数週間は学習をする必要があります。概要を抑えられても、細かい要望を実現しようとすると調査に更に時間がかかることはよくあります。使用者が多くないフレームワークになると、情報量が少なく、調査が難しいこともあるでしょう。また、ドキュメントは基本的に英語で書かれていることが多いです。 イレギュラーに対応できないことがある フレームワークはいわゆる「よくある機能」を開発する際には有用です。しかし、前例が少ない機能を開発したい場合、対応できないことが多々あります。フレームワークは決められたルールに則ってサービスを開発していかなければならないため、イレギュラーが多発するようなサービスではフレームワークを利用しないほうが作りやすいことがあるのです。 おすすめSwiftフレームワーク7選 ここからは、人気のフレームワークや、目的によって有用なSwiftフレームワークについて解説していきます。 Perfect Perfectは、Swiftの公開とほぼ同時期にリリースされたフレームワークです。 Perfectを習得すると、Swiftひとつでフロントエンドとバックエンドを両方とも開発することが可能になります。 Perfect公式サイト Kitura Kituraは、Webアプリケーションやサーバー開発ができるフレームワークです。 サーバーサイドでのSwift開発を高速にするために作られました。 現在は、開発元のIBM社からコミュニティが運営するプロジェクトへと移行されています。 Kitura公式サイト Vapor Vaporは、PHPのLaravelにインスパイアされて作成された、Webアプリケーション開発が可能なフレームワークです。 他にも、REST APIやリアルタイムアプリケーションなどの開発に適しています。 macOSとLinuxで利用可能です。 Vapor公式サイト Express Expressは、MVCによる開発サポートがされている、Webアプリケーション開発が可能なフレームワークです。 軽量でシンプルなので、処理が高速という特徴を持っています。 Express公式サイト Swifton Swiftonは、RubyのRuby on Railsを参考として作られた、Webアプリケーションフレームワークです。 コードがシンプルで、書きやすいのが特徴です。 また、MySQLやPostgreSQLをサポートしています。 Slimane Slimaneは、Swift3で開発可能なWebアプリケーションフレームワークです。 コンパクトでありながらも、さまざまなモジュールを組み合わせて開発が可能になっています。 HTTPSwiftServer HTTPSwiftServerは、macOS用のCocoaを拡張するためのフレームワークです。 HTTPをiOSアプリと連携することが可能です。 まとめ この記事では、Swiftのフレームワークについて解説してきました。 macOS、iOS周りの開発が進んでくると、Swiftの需要も増すので、フレームワークの必要性も同時にあがってきます。 適切なフレームワークを採用することで、作業効率を上げて、良い開発ライフを送りましょう! テクフリでフリーランス案件を探してみる

Java
Javaのおすすめフレームワーク13選をご紹介【2025年最新】
フレームワークとは フレームワークとは、プログラミング開発において必要な機能を標準化したものです。例えばJavaを1から書く場合には200行必要な機能が、フレームワークを利用すると20行程度で済むこともあります。フレームワークと似た言葉としてライブラリがありますが、両者の違いは「制御の反転があるかどうか」という点です。 ライブラリの場合、プログラムを動かす主導権はプログラマーが書いたコードにあります。一方でフレームワークの場合、プログラマーが書いたコードはフレームワークによって制御されるのです。 つまり、ライブラリは主導権がエンジニア側にあり、フレームワークは主導権がフレームワーク側にあると言えます。フレームワークをうまく活用して、効率よくJavaアプリケーションを開発できるエンジニアを目指しましょう。 テクフリでフリーランス案件を探してみる Javaフレームワークを利用するメリット Javaアプリケーションをすべて自分でコーディングするには、膨大な手間がかかります。フレームワークは事前に定義された構造やパターンを提供するため、アプリケーションの設計や開発において生産性が向上します。そのほかにもJavaフレームワークを利用するメリットは多岐にわたります。本記事では、Javaフレームワークを活用するメリットとして以下を紹介します。 開発スピードが上がる コードの保守性が向上する バグが減少する セキュリティが向上する フリーランスとして仕事が取りやすくなる 開発スピードが上がる MVP開発やリーンスタートアップという言葉が注目されているように、IT/Web業界では特にサービスを高速で開発することが重要です。Javaのフレームワークを利用するのとしないのでは、開発スピードにかなりの差が生じます。 例えばJavaのフレームワークには、データベースアクセスの機能やログイン機能などが備わっています。これらの機能をフレームワークなしで完成させるには、かなりの時間を要してしまうのです。Javaフレームワークを活用すると開発スピードが上がるという点は、大きなメリットといえるでしょう。 コードの保守性が向上する プログラミングコードの書き方には、その人の個性やクセが出ることも多く、他人が書いたコードを修正するのはかなり大変な作業です。フレームワークを利用することによって、統一性のあるコードを記述できます。コードの統一性を保持することで多人数開発にも対応しやすくなり、コードの保守性が向上する点が特徴です。 バグが減少する Javaのフレームワークは基本的に大人数のエンジニアに利用されています。そのため、バグはすでに解決されていることが多いです。同じ機能を実装する場合、自分でコーディングするよりもフレームワークを活用したほうが、バグが少なくなる可能性が高いといえるでしょう。多くの人によって修正・利用されてきた実績を持つフレームワークを活用して、バグが少ないアプリケーションの開発を目指しましょう。 セキュリティが向上する Javaフレームワークは、セキュリティ対策が施されているものも多いです。例えば、Spring Securityフレームワークを使うと、認証、認可、暗号化などの機能を利用できます。このように、効率よくアプリケーションのセキュリティを向上できる点も、Javaフレームワークを活用するメリットのひとつです。Javaフレームワークを活用することで、アプリケーションの脆弱性を最小限に抑えられるでしょう。 フリーランスとして仕事が取りやすくなる Javaの中規模、大規模以上案件では、フレームワークが利用されていることがほとんどです。特にLaravelは年々ニーズが上昇しているため、Javaエンジニアのフリーランスとして仕事を安定的に獲得するために、日々のキャッチアップは必須といえるでしょう。 テクフリでフリーランス案件を探してみる Javaフレームワークを利用するデメリット フレームワークは便利ですが、以下のようなデメリットもあります。 学習期間が必要 柔軟性に欠ける パフォーマンスが低下することもある Javaフレームワークを利用するデメリットについても確認しておきましょう。 学習期間が必要 フレームワークを使いこなすにはJavaの理解がある前提で、さらにフレームワークの学習期間が必要です。フレームワークによっては、学習に数週間かかるものもあります。 概要を理解しても、さらに細かい要望を実現しようとすると調査に時間がかかることはよくあります。ドキュメントは英語のものもあるため、記載されている内容を読み解くのに苦労することもあるでしょう。フレームワークを使いこなすためには、学習期間が必要だということを覚えておきましょう。 柔軟性に欠ける フレームワークはいわゆる「よくある機能」を開発する際には便利です。しかし、前例が少ない機能を開発したい場合、対応できないことが多々あります。フレームワークは決められたルールに則ってサービスを開発していかなければならないため、イレギュラーが多発するようなサービスではフレームワークを活用できないこともあります。アプリケーションの要件が特殊な場合や、フレームワークの制約に合わない場合には、柔軟性に欠けると感じてしまうこともあるでしょう。 パフォーマンスが低下することもある 一部のJavaフレームワークは非常に複雑な機能を提供しています。このため、アプリケーションに不要な機能まで取り込んでしまい、実行に時間がかかる場合があります。特に、大規模なアプリケーションを開発する場合は、以下のような注意が必要です。 必要最低限の機能のみを利用する バージョンを最新に保つ パフォーマンスを向上させるためのチューニングを行う パフォーマンス低下への対策を行い、なるべく未然に防ぎましょう。 おすすめのJavaフレームワーク13選 ここではおすすめのJavaフレームワークとして、以下の13個を紹介します。 Spring Framework Play Framework Apache Struts Apache Wicket Hibernate JSF Jakarta EE Spark Framework Dropwizard ZK SAStruts (Super Agile Struts) GWT Grails Spring Framework Springは2003年にリリースされたJavaでアプリケーションを開発するためのフレームワークです。Springの1つ目の特徴は依存性の注入(DI)です。 DI(Dependency Injection)とは、オブジェクトの情報を外部に分けることで、コンポーネントの集合としてアプリケーションを組み立てるデザインパターンのことです。具体的にはクラスやライブラリという動作に必要なクラスをそのクラス内で生成するのではなく、Springに生成を任せます。 もう1つの特徴はAOP(Aspect Oriented Programming)です。Javaは属性(データ)と操作(メソッド)の集合であるクラスを単位としています。しかし、クラスには分解できない要素も存在します。分解できないものは複数のクラスにまたがるため、変更の際にすべてのコードから変更箇所を探す必要が生まれるなど管理が難しくなるのが現状です。 AOPとは、この分解できない要素をアスペクトとしてモジュール化したものです。AOPによって、コードの重複を排除し、保守性と可読性を向上できます。特に、ログ出力やトランザクション管理などの共通の処理は、AOPを活用することで効果的に管理できます。 Spring Frameworkは、エンタープライズレベルのアプリケーションから小規模なプロジェクトまで広く利用されており、Java開発者にとって欠かせないフレームワークともいえるでしょう。 Play Framework Play FrameworkはJavaとScalaを利用してつくられたフレームワークです。RubyのRuby on RailsやPythonのDjangoのようなMVCモデルを採用しています。Play Frameworkは、コンパイル時間が短く、高速にデプロイできる点が特徴です。 CPUリソースやメモリ使用量が少ないのもPlay Frameworkの良いところです。Play Frameworkは、文法が簡潔で、多くの機能がデフォルトで提供されています。学習コストが低いフレームワークなので、気になる人は実際に動かして習得してみましょう。 Apache Struts Apache StrutsはMVC(Model-View-Controller)アーキテクチャを採用したWebアプリケーションフレームワークです。過去にはJavaでは最も有名なフレームワークとして、多くのアプリケーションで採用されていました。 しかし、Apache Strutsには脆弱性が多く、攻撃のターゲットになりやすいという問題があります。過去にはApache Strutsの脆弱性を悪用した攻撃が世界中で発生し、多くの企業が被害を受けました。 このため、Apache Strutsの利用は徐々に減少し、最近では他のフレームワークに移行する企業が増えています。Apache Strutsの脆弱性については、情報処理推進機構(IPA)の脆弱性対策情報一覧も参考にしてみてください。 情報処理推進機構HP Apache Wicket Apache WicketはApacheソフトウェア財団が提供している2005年に開発されたフレームワークです。他のフレームワークはなるべくソースコードの記述を抑えようと、設定ファイルなどにアプリケーション設定を書くことで作業負担を減らそうとしますが、Apache WicketはほとんどをJavaで記述するという特徴があります。 実際にシステムをつくるにはJavaだけでなく、Servlet、JSP、設定ファイルなど多くの設定が必要で煩雑になるケースが多いのですが、Apache Wicketでは基本的にJavaさえ知っていればシステム構築ができます。設定ファイルもweb.xmlだけで済むので、シンプルにJavaで開発をしたい場合にオススメです。 Hibernate Hibernateはオブジェクトとリレーショナルデータベースのマッピングを行うORM(Object-Relational Mapping)フレームワークです。Hibernateを利用することで、Javaオブジェクトをデータベースのテーブルと自動的にマッピングできます。Hibernateを利用することで、データベースにアクセスするコードを簡潔に記述して、パフォーマンスを向上できる点が特徴です。 JSF JSF(JavaServer Faces)は、JavaでWebアプリケーションを開発するためのフレームワークです。Java EE(現在はJakarta EE)の一部として提供されています。 JSFの特徴は、HTMLにタグを追加することでWebアプリケーションの画面を作成できるという点です。JSFは、サーブレットやJSPと組み合わせて使用することで、高度なWebアプリケーションを開発できます。Java EE(Jakarta EE)の一部として提供されているため、Javaエンタープライズアプリケーション開発の標準的な選択肢のひとつとなっています。 Jakarta EE Jakarta EEは、Javaエンタープライズエディション(Java EE)の後継として開発されたエンタープライズJavaアプリケーションのプラットフォームです。Jakarta EEは、以下のような多数のコンポーネントとサービスを含んでおり、企業レベルのWebアプリケーションや分散システムの開発に適しています。 Java Servlet JavaServer Faces(JSF) Java Persistence API(JPA) Java Messaging Service(JMS) Jakarta EEは、エンタープライズアプリケーションに必要な機能を提供しているため、多くの企業で採用されています。信頼性と拡張性に優れたエンタープライズアプリケーションの開発に欠かせないフレームワークとして、広く利用されているフレームワークです。 Spark Framework Spark FrameworkはRubyのフレームワークである、Sinatraに影響を受けており、シンプルで軽量なのが特徴です。Spark Frameworkは、Java 8のラムダ式を使うことで、簡単にプログラムを記述できます。 軽量でスピーディーなWebアプリケーションの開発に適しており、小規模なプロジェクトや簡単なAPIの構築に便利という特徴があります。マイクロサービスを構築するのに最適なフレームワークとして、REST APIの作成に使われることが多いです。 Dropwizard Dropwizardは米国のSNSであるyammerのWebサービス提供のために作られた、新しいJavaフレームワークです。サーブレットコンテナ「jetty」が組み込まれているため、tomcatなどのアプリケーションを準備する必要がありません。 また、多くのWebシステムでは動作時に複数のJARファイルというコンパイルされたJavaの圧縮ファイルが必要になりますが、Dropwizardでは1つのJARファイルだけで動作可能です。 ZK ZKはブラウザとWebサーバの非同期通信を行うAjaxを取り入れた、Javaフレームワークです。MVCモデルのViewの部分である「プレゼンテーション層」の開発効率を高めるフレームワークと言われています。 ユーザーインターフェースが豊富で、画面で発生したボタンクリックなどのイベントはAjaxで管理されています。ZKを使った開発の際にはJavaScriptの知識は必要になりますが、Ajaxを多用するシステムを構築するときにおすすめのフレームワークです。 SAStruts (Super Agile Struts) Apache Strutsをベースに開発された、Webアプリケーションフレームワークです。SAStrutsは、Strutsの機能を継承しつつ、S2JDBCというO/RマッパーやS2Unitというテスティングフレームワークなどを統合しています。 SAStrutsは、Strutsの開発効率を向上させることを目的としており、アノテーションやコンベンションによる設定の簡略化などの機能があります。なお、SAStrutsはSeasar2というフレームワークの一部として組み込まれており、Seasar2と共に2016年にサポートが終了している点に注意しましょう。 GWT GWT(Google Web Toolkit)は、Googleが開発したJavaフレームワークです。Javaで記述されたWebアプリケーションを、ネイティブなWebブラウザアプリケーションとして実行するためのフレームワークです。 GWTは、Javaで書かれたコードをJavaScriptに変換することで、ブラウザ上で動作するWebアプリケーションを開発できます。GWTは、AjaxやHTML5などの最新のWeb技術を利用できるだけでなく、Javaの強力な機能やツールも活用できる点が特徴です。 Grails Grailsは、Groovyプログラミング言語を使用して開発されたオープンソースのWebアプリケーションフレームワークです。Grailsは、GroovyというJavaと互換性のある動的言語をベースにしており、簡潔で直感的なコーディングができます。 また、SpringやHibernateなどの人気のJavaフレームワークと連携できるため、Javaのエコシステムを活用できる点がメリットです。Grailsは、高生産性、簡易なデータアクセス、Groovyとのシームレスな統合など、さまざまなメリットを備えたWebアプリケーションフレームワークです。 Webアプリケーションの開発、マイクロサービスアーキテクチャの開発、モバイルアプリケーションの開発など、さまざまなアプリケーションの開発に適しています。 テクフリでフリーランス案件を探してみる Javaフレームワークを選ぶ際のポイント Javaフレームワークを選ぶ際には、実績と必要な機能の有無を重視して、適切なフレームワークを選ぶことが重要です。Javaフレームワークを選ぶ際のポイントとして、以下の2点があげられます。 実績のあるフレームワークを選ぶ 必要な機能の有無を確認する 実績のあるフレームワークを選ぶ Javaフレームワークは数多く存在しますが、すべてのフレームワークが同じ品質や信頼性を持っているとは限りません。フレームワークを選ぶ際には、そのフレームワークがどれだけ実績があるかを確認することが重要です。 実績のあるフレームワークは、多くの開発者によって使用されており、安定性や信頼性が高いというメリットがあります。また、ドキュメントやサンプルコードが充実しているため、学習や開発が容易になります。実績のあるフレームワークの判断基準は以下のとおりです。 多くのユーザーやプロジェクトで利用されている 開発やメンテナンスが活発に行われている ドキュメントやサポートが充実している バグやセキュリティの問題が少ない 実績のあるフレームワークの例としては、Spring FrameworkやPlay Frameworkなどが挙げられます。 必要な機能の有無を確認する Javaフレームワークは、それぞれに特化した機能や特徴を持っています。フレームワークを選ぶ際には、自分が開発するアプリケーションの要件や目的に合わせて、必要な機能が備わっているかを確認することが重要です。必要な機能の有無を確認することで、以下のようなメリットがあります。 開発の効率や品質が向上する 不要な機能によるオーバーヘッドや制約を回避できる アプリケーションの拡張性や保守性が向上する 必要な機能の確認においては、以下のような点に注意するとよいでしょう。 フレームワークの概要や特徴を理解する フレームワークが提供する機能やコンポーネントを調べる フレームワークの利用事例やレビューを参考にする フレームワークのサンプルコードやデモを試す まとめ 今回はJavaのフレームワークについて紹介しました。Javaフレームワークは、Javaプログラミング言語を使用してWebアプリケーションやマイクロサービス、デスクトップアプリケーションなどのソフトウェアを効率的に開発するための基盤となるツールセットです。 フレームワークには、アプリケーションの骨格となる設計パターンや共通の機能、便利なライブラリが含まれており、開発者はこれらを活用することで、効率的にアプリケーションを構築できます。Javaフレームワークを活用するメリットは以下のとおりです。 開発スピードが上がる コードの保守性が向上する バグが減少する セキュリティが向上する フリーランスとして仕事が取りやすくなる また、Javaフレームワークには以下のようなデメリットもある点も押さえておきましょう。 学習期間が必要 柔軟性に欠ける パフォーマンスが低下することもある Javaフレームワークを活用した案件は多く、単価が高いものもあります。今回紹介した案件情報やJavaフレームワークを参考に、実務に活かせるスキルを習得しましょう。 テクフリでフリーランス案件を探してみる

Go言語
Go言語おすすめフレームワーク10選と特徴を解説【2025年最新】
Go言語は、近年利用者が増加していて、トレンドのプログラミング言語のひとつと言えるでしょう。その理由は、Go言語が、高速で効率的なコードを生成できる、学習が簡単、そして大規模なソフトウェアを構築するのに適しているためです。また、Go言語には効率的にアプリケーションを開発するためのフレームワークも多数存在しています。 そのため、 「Go言語のフレームワークって何があるの?」 「たくさんあってどのフレームワークを使えばいいかわからない…」 といった疑問をお持ちの方もいるでしょう。 そこで、この記事ではGo言語のフレームワークについて解説していきます。最後まで読んでいただければ、どのフレームワークを学習すれば良いかわかるでしょう。 テクフリでフリーランス案件を探してみる Go言語とは Go言語は、Googleによって開発されたプログラミング言語です。シンプルな構文と高い効率性を備え、システムプログラミングやウェブアプリケーションの開発に適しています。Go言語は静的型付け言語でありながら、コードの記述が直感的であり、メモリ管理やゴルーチンと呼ばれる軽量スレッドを備えた並行処理が得意です。これにより、高いパフォーマンスとスケーラビリティを実現し、大規模なシステムでも効果的に動作します。 また、Go言語はクロスコンパイルに対応しており、MacからWindowsやLinux向けのバイナリを作成することも可能です。さらに標準ライブラリも豊富に提供されており、ファイル操作やネットワーク処理、データベース処理などを簡単に定義できる点もメリットと言えるでしょう。このような特徴があることから、Go言語は小規模から大規模なアプリケーション開発において多くの開発者が使用しているプログラミング言語になります。 関連記事:Go言語の歴史を解説! Go言語のおすすめフレームワーク10選 Go言語のおすすめフレームワークを10種類、その特徴とともに紹介していきます。 Echo Echoは軽量のWebフレームワークとして知られています。Ginよりも高速処理が可能で、拡張性も高くなっているので、注目度が増しているフレームワークです。Echoは、シンプルさが特徴です。コードが簡潔で読みやすく、初心者にもわかりやすくなっています。また、公式ドキュメントも充実しているので、学習しやすいフレームワークとしても人気です。 Revel Revelは、JavaのPlay Frameworkを元に作成された、フルスタックフレームワークです。Revelひとつで基本が揃います。処理速度が速く、効率的に処理を行えるところが特徴です。コミュニティが活発で、学習コストが抑えられているため、習得難易度は高くはありません。初心者でも習得しやすいフレームワークとしておすすめです。 Gin GinはGo言語の初期から存在するフレームワークです。軽量で高速なフレームワークであり、多くの機能を備えています。そのため、Go言語でWebアプリケーションを開発する際に、Ginがよく使用されているシーンを見ることも少なくないのではないでしょうか。 Ginは、軽量なフレームワークであるため、メモリ使用量が少なく、パフォーマンスが向上するという特徴があります。また、高速なフレームワークであるため、リクエスト処理が高速です。Ginは、多くの機能を備えているため、Webアプリケーションを簡単に開発できます。古くからあるため、多くのユーザーに使用されているフレームワークです。 Beego BeegoはRubyのSinatraを元に作成された、フルスタックフレームワークです。Webアプリケーション・APIの開発機能や自動テスト機能を備えています。多機能のため、はじめてGo言語で大規模なアプリケーションを開発するという人におすすめです。 Goji Gojiはnet/httpと互換性を持っているフレームワークです。このため、ルーティングやHTTP通信といった既存のnet/httpの知識を活用できるというメリットがあります。GojiはGinの次に高速処理が可能と言われているフレームワークです。高速処理によってリクエストの処理性能を最大化し、ユーザーエクスペリエンスを向上できます。Gojiは、小規模から中規模のプロジェクトに向いており、スケーラビリティとパフォーマンスを重視する開発者に好まれているフレームワークです。 iris irisは最速のフレームワークを謳っているフレームワークです。デバイスに左右されず利用可能であるため、スマートフォンからデスクトップまで、さまざまなデバイスでも高速に動作するという特徴を持っています。また、irisはドキュメント量が豊富なことでも有名です。情報量が多く学習しやすいフレームワークなので、初めてGo言語のフレームワークを学習する人にもおすすめなフレームワークともいえるでしょう。 Gocraft GocraftはGo言語のWebフレームワークのひとつで、Webアプリケーションのバックエンド処理を定義するのに適したフレームワークとして、人気です。Gocraftは、高速でスケーラブルなルーティング機能とミドルウェアのパッケージを提供しています。 また、静的型付けをサポートするために、データ型の値を別のデータ型に変換するキャスティングや、プログラムが自身の構造や情報を解析し、実行時にデータ型やメンバーにアクセスするリフレクションを使っている点も特徴のひとつです。 Aero Aeroは、パフォーマンスを重視したWebフレームワークです。このフレームワークの特徴は、処理速度の速さです。最適化されたHTTPサーバーを通じて高速なレスポンスを実現します。小規模ながらも、高性能なアプリケーションを開発する際に最適で、リソースの使用効率に優れていると言えるでしょう。また、Aeroは簡潔なAPIとシンプルな設定で使いやすさを追求しているため、Go言語初学者にも扱いやすいフレームワークとして注目されています。 Mango Mangoは、モジュール性と拡張性を特徴とするフレームワークです。このフレームワークは、「プラグアンドプレイ」方式のモジュールシステムを採用しており、必要な機能を柔軟に追加、変更することができます。Mangoは特に中規模から大規模のアプリケーション開発に適しており、多様なライブラリとの組み合わせにより、複雑なビジネス要件に対応可能です。さらに、コミュニティが提供する豊富なドキュメントとサポートは、開発プロセスを容易にし、生産性を向上させることができるでしょう。 Gorilla Gorillaは、Go言語のフレームワークの中でも特に強力なルーティング機能を持つフレームワークです。このフレームワークは、高度にカスタマイズ可能なルーティングとディスパッチ機能を提供し、大規模なRESTful APIの開発に適しています。 また、Gorillaはセッション管理、ログイン認証、クロスサイトリクエスト対策などのセキュリティ機能も充実しており、安全性の高いアプリケーションを構築するのに役立つでしょう。その堅牢性と柔軟性から、企業レベルのアプリケーション開発に広く採用されています。 テクフリでフリーランス案件を探してみる Go言語におけるフレームワークを利用するメリット Go言語を使用するにあたって、フレームワークを利用すると以下のようなメリットがあります。 開発速度の向上 コードの可読性と保守性の向上 セキュリティ対策の強化 案件獲得につながるスキルの習得 開発速度の向上 Goのフレームワークを使うことで、アプリケーション開発の速度が大幅に向上します。たとえば、ルーティングやデータベース接続、認証機能といった基本的な機能があらかじめ用意されているため、それらを一から実装する必要がありません。GinやEchoのようなフレームワークは、シンプルなAPIと共通の処理パターンを提供しているため、開発者は短期間でプロトタイプや本番環境のシステムを構築できます。特に、スタートアップやアジャイル開発において、迅速なリリースサイクルを維持するために有効です。 コードの可読性と保守性の向上 フレームワークを使用することで、コードの構造が統一され、開発者間の認識が揃いやすくなります。Goのフレームワークは一般的にMVC(モデル・ビュー・コントローラー)のパターンを採用しており、コードの分割が明確になるため、コードベースの可読性が高まります。さらに、プロジェクトに新しいメンバーが加わった場合でも、フレームワークの標準的な構成やコーディングスタイルに従うことで、コードの理解が容易になります。結果として、メンテナンス性が向上し、長期間にわたって安定した開発が可能となります。 セキュリティ対策の強化 Goの主要なフレームワークには、セキュリティのベストプラクティスが組み込まれています。例えば、入力値のバリデーション、CSRF(クロスサイトリクエストフォージェリ)対策、XSS(クロスサイトスクリプティング)防御、SQLインジェクションの防止などがあらかじめ実装されているため、セキュリティ面の基本的な対策を取り入れやすくなります。さらに、コミュニティのサポートが活発なフレームワークでは、セキュリティに関するアップデートが迅速に行われるため、安心して使用できます。 案件獲得につながるスキルの習得 Go言語の中規模、大規模以上案件では、フレームワークが利用されていることがほとんどです。特にEchoは人気のフレームワークとなっているため、Go言語エンジニアとして仕事を獲得したい場合は、習得しておくと良いでしょう。Echoを習得することで、Go言語でWebアプリケーションを効率的に開発できます。また、Echoは人気のあるフレームワークであるため、Echoを習得することで、フリーランスとして仕事が取りやすくなるといえるでしょう。 Go言語は、現在注目されているプログラミング言語であり、今後も需要が高まると予想されます。そのため、Echoを含む主要なGo言語のフレームワークを習得することは、フリーランスとしてのキャリアを強化することに繋がり、継続的な仕事の獲得にも役立つでしょう。Echoのように人気があるGoのフレームワークを習得し、より多くの案件を獲得できるエンジニアを目指してみてください。 Go言語フレームワークを使用するデメリット 一方で、Go言語フレームワークを使用することのデメリットとして、以下の2点が挙げられます。 学習コスト 柔軟性の制限 学習コスト Go言語自体がシンプルな言語であるため、フレームワークを利用することで新たな学習が必要になります。特にGinやEchoなどのフレームワークはそれぞれ独自の設計思想やAPIを持っているため、初めて利用する場合は苦労することもあるでしょう。また、フレームワークのバージョンアップに伴う仕様変更にその都度対応する必要があり、継続的な学習が求められることもデメリットとなり得ます。 柔軟性の制限 フレームワークは便利な機能を多数提供している一方で、標準的なやり方に従うことが求められ、自由度が制限される場合もあります。Goはもともとフレームワークを使わずにコーディングすることが推奨される言語でもあり、フレームワークを利用することでGoらしいシンプルさや軽量さが損なわれる可能性があります。プロジェクトの特殊な要件に合わせたカスタマイズが必要な場合などにおいては、フレームワークの制約が障害となることが考えられます。 Go言語フレームワークの将来性とトレンド Go言語フレームワークは将来性が高く、多くの開発者や企業に採用されています。中でも、EchoやRevel、Ginは注目されているフレームワークです。これらのフレームワークは、Go言語のエコシステムにおいて、様々な場面で使用されています。Echoのような高速で軽量なフレームワークは、リアルタイム処理やスケーラブルなアプリケーションの需要増加に伴い、ますます重要になってくるでしょう。 一方、Revelはフルスタックの機能を提供することで、開発の複雑さを減少させ、生産性の向上を図ることが可能です。Ginは、古くからあるフレームワークですが、シンプルさとパフォーマンス等のバランスが優れているため、多様なプロジェクトでの採用が期待されてます。 最近では、クラウド最適化されたアプリケーションやマイクロサービスが主要な開発トレンドのひとつです。Go言語フレームワークは、これらと相性が良いため、今後も伸び続けるでしょう。また、Go言語はGoogleが開発したこともあり、コミュニティが活発です。そのため、Go言語フレームワークに関しても将来性が期待されています。 Go言語の案件情報 テクフリの案件データベースによると、Go言語の案件は約700件程度で平均単価は87.7万円となっています。他の言語に比べて比較的単価水準が高いことからも、Go言語を扱えるエンジニアの需要の高さが伺えます。 ※2024年10月時点(非公開案件を含む) テクフリでフリーランス案件を探してみる まとめ Go言語の代表的なフレームワークとその特徴について、お分かりいただけたでしょうか。フレームワークについて解説してきました。Go言語の利用者が増えていくと、そのフレームワークを扱えるエンジニアの市場価値も上がっていきます。興味のある開発分野や獲得したい案件の特徴にマッチするフレームワークを習得していきましょう。

ネットワークエンジニア
ネットワークエンジニアの将来性は?年収データや求められるスキルを解説
近年、クラウドサービスが普及しており、クラウドエンジニアに注目が集まっています。一方、ネットワークエンジニアは、古くからある職種です。 主に、企業のネットワーク設計や構築、保守運用、セキュリティ対策など、重要な役割を担っています。 ネットワークエンジニアは、クラウドエンジニアと、一部役割が重なる部分もあるでしょう。しかし、クラウド時代においても、ネットワークエンジニアの存在は欠かせません。 本記事ではネットワークエンジニアの将来性について、クラウドエンジニアとの違いにも着目しつつ解説します。 テクフリでフリーランス案件を探してみる ネットワークエンジニアとは ネットワークエンジニアとは、企業のネットワークに関する業務を行うエンジニアのことを指します。 ネットワークエンジニアの仕事では、ネットワークが問題なく動作するように、セキュリティやパフォーマンスの最適化などを考えることが必要です。 ネットワークエンジニアの役割 ネットワークエンジニアの役割は、ネットワークインフラストラクチャを設計、構築、管理、運用することです。 ネットワークエンジニアは、企業や組織の業務におけるネットワークの安定性、可用性、スケーラビリティを確保するために重要な役割を担っています。 近年、デジタル化が進む中、ネットワークエンジニアの役割はますます重要性を増していると言えるでしょう。 企業や組織がネットワークに求める要件が高度化する中、ネットワークエンジニアのスキルや知識が求められています。 ネットワークエンジニアの仕事内容 ネットワークエンジニアの仕事は大きく以下3つに分けることが可能です。 設計 構築 保守運用 それぞれについて、詳しくみていきましょう。 設計 ネットワークエンジニアは、ニーズに合わせて、適切なネットワークを設計することが求められます。 ネットワークの設計には、ネットワークやデータ転送の方法、通信プロトコルなどの知識が必要です。 設計業務では、ネットワークの設計に関する専門知識を持ち、ビジネスのニーズに合わせたネットワークの設計を行うことが重要となります。 構築 ネットワーク構築には、ネットワーク機器の設定や接続、セキュリティの設定など、様々な業務内容があります。 構築業務では、これらの作業を適切に実施することで、信頼性の高いネットワークをつくり、サービスの安定稼働を実現することが必要です。 保守運用 ネットワークの保守運用には、定期的なメンテナンスや問題の修正、アップデートなどの業務が生じます。 また、ハードウェアの故障やファームウェアの更新など、機器の物理的な修理やソフトウェアの更新も必要です。 さらに、ネットワークの利用状況のモニタリングや、障害発生時の復旧作業なども業務内容に含まれます。 ネットワークエンジニアが扱う技術 ネットワークエンジニアは、主にルーティング、スイッチ、ファイアウォール、VPNなどの技術を扱います。 これらの技術は、安定したネットワーク環境を維持するために重要です。 ルーティングは、ネットワーク上のデータを効率的に転送するための技術であり、スイッチは複数のデバイスを接続するための技術となります。 ファイアウォールは、ネットワークに不正アクセスや攻撃がないように監視するための技術であり、VPNはネットワーク上のデータの安全な転送を実現するためのものです。 これらの技術を熟知したネットワークエンジニアは、ネットワーク機器の設定やトラブルシューティング、改善提案などの業務を行うことができます。 クラウドエンジニアとは クラウドエンジニアは、クラウド環境の設計構築や運用保守を行う技術者です。 主にクラウドサービスを提供する企業で活躍しています。 クラウドエンジニアの役割 クラウドエンジニアの役割は、クラウド技術を活用して、企業などが持つIT課題を解決することです。 近年、クラウドサービスの普及に伴い、クラウドエンジニアの需要が急増しています。 企業や組織において、クラウドの導入や運用に関するニーズが高まる中、クラウドエンジニアの役割はますます重要性を増しています。 クラウドエンジニアの仕事内容 クラウドエンジニアの仕事は、ネットワークエンジニア同様、大きく以下3つに分けることが可能です。 ・設計 ・構築 ・保守運用 それぞれについて、確認していきましょう。 設計 クラウド環境の設計には、クラウドサービスの選定から始まります。 クラウドサービスには、AWSやAzure、Google Cloud Platformなどがあり、選定には各サービスに関する知識が必要です。 クラウドエンジニアは、企業や組織のニーズに合わせて最適なクラウドサービスを選択し、アーキテクチャの決定やリソースの割り当てを行います。 構築 構築では、仮想化技術やコンテナ技術を使用して、アプリケーションやシステムをクラウド上に展開します。 構築フェーズにおける業務では、仮想化技術を利用することが多いです。 物理的なサーバーを複数の仮想マシンに分割し、効率的なリソースの割り当てなどを行います。 また、コンテナ技術を使用して、アプリケーションを複数のコンテナに分割し、管理しやすくするといったケースもあるでしょう。 これらの技術を駆使して、スケーラブルで可用性の高いクラウド環境を構築することが重要です。 保守運用 クラウドエンジニアが担当する保守運用は、以下のような業務です。 インスタンスの監視 ログの解析 パフォーマンスチューニング スケールアップ スケールダウン モニタリングツールを使用して、クラウド環境の監視を行い、問題が発生した場合には迅速に対応します。また、ログの解析を行い、システムのトラブルシューティングを行うことも必要です。さらに、パフォーマンスの最適化やスケールアップ/ダウンの調整など、システムの安定稼働に必要な調整作業を行うケースもあります。 テクフリでフリーランス案件を探してみる ネットワークエンジニアとクラウドエンジニアの違い ネットワークエンジニアとクラウドエンジニアには大きく3つの違いがあります。 それぞれ詳しくみていきましょう。 仕事内容の違い ネットワークエンジニアとクラウドエンジニアの仕事内容は異なります。 ネットワークエンジニアは、オンプレミスのネットワーク機器を設定したり、運用するケースが多いです。 主に、通信環境の維持や改善することが主な仕事となります。 一方で、クラウドエンジニアは、クラウドプラットフォームを構築し、アプリケーションやサービスをデプロイすることが主な仕事です。 クラウドエンジニアは、インフラストラクチャの構築に焦点を当て、自動化とスケーラビリティのためにクラウドプラットフォームを利用します。 一般的には、クラウドサービスの設定、運用、トラブルシューティング、スケーリング、パフォーマンスチューニングなどを行うことが多いでしょう。 扱う技術の違い ネットワークエンジニアが扱う技術としては、ルーティングやスイッチング、VPN、ファイアウォールなどが挙げられます。 これに対して、クラウドエンジニアが扱う技術としては、AWSやAzure、GCPなどのクラウドプラットフォームを始めとする、クラウドインフラストラクチャに関する技術です。 キャリアパスの違い ネットワークエンジニアとクラウドエンジニアになるまでのキャリアパスは異なります。 ネットワークエンジニアは、ネットワークに特化した技術者として、CCNAやCCNPといったネットワークエンジニア向けの資格取得が一般的です。 参考:CCNA https://www.cisco.com/c/ja_jp/training-events/training-certifications/certifications/associate/ccna.html 参考:CCNP https://www.cisco.com/c/ja_jp/training-events/training-certifications/certifications/professional/ccnp-enterprise.html 一方で、クラウドエンジニアは、AWSやAzure、GCPなどのクラウドプラットフォームの技術者として、AWS認定ソリューションアーキテクトやMicrosoft Certified Azure Solutions Architectといった資格を取得する人が多いでしょう。 参考:AWS認定ソリューションアーキテクト https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/ 参考:Microsoft Certified Azure Solutions Architect https://learn.microsoft.com/ja-jp/certifications/azure-solutions-architect/ ネットワークエンジニアのクラウドにおける役割・必要なスキル クラウドサービスを使用していく中で、ネットワークエンジニアの役割は重要です。 クラウド上のアプリケーションやデータの通信を担当するネットワーク部分において、ネットワークエンジニアが保有する知識やスキルが必要不可欠だからです。 具体的には、ネットワークエンジニアが保有する、以下2つのスキルが大切と言われています。 ネットワークの知識 クラウド上のアプリケーションやデータの通信は、ネットワークの設計や運用によって成り立っています。 ネットワークエンジニアが保有するネットワークの設計や構築、運用管理、トラブルシューティングなどの知識は欠かせません。 また、クラウドサービスを利用する場合には、クラウドプロバイダーとのネットワーク接続の設定や管理が必要となります。 セキュリティ クラウド上のアプリケーションやデータの通信は、セキュリティ上の課題があります。 この課題を解決するには、クラウド上にあるネットワークのセキュリティ設定や、アクセス制御、セキュリティ脆弱性の対策などが必要です。 また、クラウド上でのトラブルシューティングにおいて、セキュリティ上の問題を特定し、適切な対応を行う必要があります。 クラウドエンジニアがいたらネットワークエンジニアは不要? 今後もネットワークエンジニアの需要は増加し、将来性は高いと言えます。 そのため、クラウドエンジニアがいても、ネットワークエンジニアは不要ではありません。 なぜなら、ネットワークエンジニアとクラウドエンジニアの業務領域が完全に同じではないからです。 また、クラウドサービスを理解する上で、ネットワークの知識は必要不可欠となります。 クラウドエンジニアとネットワークエンジニアが共存する可能性 クラウドエンジニアとネットワークエンジニアは、互いに補完的な役割を担っており、どちらの職種も需要が伸び続けることが考えられます。 例えば、クラウドエンジニアがシステム全体の設計やクラウドインフラストラクチャの管理を担当するとしましょう。 一方で、ネットワークエンジニアがクラウドネットワークの設計やセキュリティの管理を担当することで、システム全体を安定的に動作させることが可能です。 このように、両者が共存する可能性が高いと言えます。 ネットワークエンジニアが、クラウドの知識を習得することで、さらなるスキルアップを目指すことができるでしょう。 ネットワークエンジニアがクラウド時代に必要な理由 クラウド時代においても、ネットワークエンジニアが必要な理由は、クラウド上で動作するシステムは、必ずネットワークを介して利用されるからです。 ネットワークの知識なしに、クラウドサービスを扱うことは困難でしょう。 逆にネットワークの知識があると、クラウド技術も習得しやすい傾向にあります。 ネットワークエンジニアの年収はどれくらい? 弊社調べによると、ネットワークエンジニア案件の平均月単価は69万円です。年収換算すると828万円になります。 また、最高月単価は150万円、最低月単価は30万円で、最も案件数が多いのは60万円台となっています。 2023/03/30 テクフリ調べ まとめ ネットワークエンジニアとクラウドエンジニアは、一部重なる部分もありますが、仕事内容や専門領域には違いがあります。 クラウド時代においても、ネットワークエンジニアは必要不可欠であり、クラウドエンジニアと共にシステム全体を運用することで、安定的なシステム運用を実現することが可能となります。 そのため、ネットワークエンジニアの将来性は高いと言えるでしょう。 テクフリでフリーランス案件を探してみる

BEM
freelance
BEMとは?基本的な構成について解説【命名規則】
大きいチームでプロジェクトを進めていく際、CSSをメンテナンスすることは困難がつきまとうものです。その困難を解決すべく、この記事ではBEM (Block Element Modifier) について解説します。 テクフリでフリーランス案件を探してみる BEMとは BEMはBlocks-Elements-Modifiersの略で、HTMLおよびCSSのクラスにおける命名規則です。BEMは Yandexで開発されました。 BEMを使うと、プロジェクトコードが読みやすく、理解がしやすくなり、CSSを操作するときに拡張および保守が容易になります。 命名規則は、フロントエンド開発者がそのコードの意味と機能を理解できるものとなります。その後他の開発者が、あなたが書いたコードを読むとき、開発者はあなたが何を意図してコードを書いたのかを理解できるので、後の分析・変更・管理が簡単になります。 BEMの命名規則を使用するメリット 小さなプロジェクトではBEMは使用されないかもしれませんが、大きなプロジェクトやチームではBEMは非常に重要になります。その理由は以下になります。 チーム全体が簡単に連携できる チームでプロジェクトを進めて行くと、全員が独自のクラス名を持ち、互いに競合することがあります。そこでBEMを使用することで、構造が明確になり、使用時に簡単に追跡できるため、この問題が解消されます。 モジュール 各ブロックのクラスは他の要因の影響を受けないため、あるクラスのCSSが別のクラスに影響を与えることを心配する必要がなくなります。 再利用できる ブロックを互いに独立して作成し、それらを使いやすく再利用することで、CSSコードの量を減らすことができます。 BEMの基本的な構成 Block ブロックは、新しい要素の主要なクラス名です。ブロックの主な機能は、ページ上のどこでも再利用できることです。また、これらのブロックは他のブロックに配置されている場合があります。ブロック名は要素に応じて明確に設定されています。 Elements(要素) ブロックのコンポーネントであり、ブロック内に配置され、その親ブロックに依存しているため、ブロックなしでは独立して存在しません。 BEMでは、要素は二重下線「__」で示されます。 Modifier ブロックまたは要素の表示タイプを変更するために使用されます。モディファイアは個別のコンポーネントとして使用されます。モディファイア名はブロック名または要素名で構成され、「-」で区切られます。 /* Block (ブロック) */ .btn { } /* Element (要素),上のブロックによって異なります*/ .btn__price { } /* Modifier (モディファイア)はブロックの状態を変更します*/ .btn--orange { } .btn--big { } このクラスの命名規則により、コンポーネントを表すブロックがあり、この例では.btnがあります。ブロックは、1つ以上の子要素が関与する親としても機能します。 Elementのクラス名とそのBlockとの関係は、Blockの名前、2つの下線、最後にElement .btn__priceの名前で表されます。 BEMの3番目のコンポーネントは、ブロック/要素の状態またはその他の派生物の調整に役立つ修飾子です。修飾子の名前は、前のブロック/要素の名前と2つのダッシュ .btn--orangeで結合されます。 最後に BEMはCSSのクラス命名規則であり、多くの利点がありますが、開発者が適切で未使用の名前を考えないようにすることが重要です。これにより、クリーンで保守しやすいコードを記述できます。クラス名が長くなるためにBEMを嫌う人や、BEMを置き換える他の方法がを利用する人はたくさんいます。 参照リンク http://getbem.com/ https://css-tricks.com/bem-101 https://webuild.envato.com/blog/chainable-bem-modifiers/ https://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/0