フレームワーク

フレームワークとは、骨組みのようなものです。
アプリケーションを開発する際は、
お客様が要望される機能や画面を、
骨組みに肉付けするように作成することで、
提供しています。

アプリケーションフレームワーク - Wikipedia


WebであればApacheStrutsというフレームワーク流れが多かったのですが、
Strutsには脆弱性が見つかり、また多種多様なフレームワークが登場しています。

様々な特徴を持ったフレームワークが存在することで多様性があるということは
理解できますが、エンジニアにとっては学習コストが多くてなかなか大変です。


代表的なフレームワークを挙げます。


Apache Struts

Webアプリケーションフレームワーク。言語はJava
ApacheTomcatというWebサーバ上で動作します。
広く一般的だったが脆弱性により情報漏洩の被害が発生し、今では選択されない。

Welcome to the Apache Struts project


Spring

Webアプリケーションフレームワーク。言語はJava
様々な機能を持ったモジュールで構成されており、
ネットでも情報が豊富に存在しているので、
Strutsから選択されることも多い。

spring.io


Seasor

Webアプリケーションフレームワーク。言語はJava
一般的には骨組みと肉付けの対応は設定ファイルによって定義されるが、
Seasorは「設定よりも規約」という概念で作られており、
規約(例えばファイル名など)に従うことで動作するので
設定ファイルが少なくて済むのが特徴。
国産だが、2016年で終了(EndOfLife)。残念。

www.seasar.org


RubyOnRails

Webアプリケーションフレームワーク。言語はRuby
Railsとも呼ばれる。これも「設定よりも規約」タイプ。
サーバからクライアントまで一貫してカバーするフルスタックフレームワークの先駆者。

github.com


Express

Webアプリケーションフレームワーク。言語はJavaScript(Node.js)。
Node.jsと言われるJavascriptエンジンで動作するWebサーバのスタンダード。
MongoDB(Database), Express(WebFramework), AngularJS(MVCFramework), Node.js(JavascriptEngine)
の頭文字をとってMEANと言われる統合環境がフルスタックフレームワークとして成長しつつある
(サーバからクライアントまでJavaScriptJSONだけで統一できる)。

Express - Node.js web application framework


このほかにも数えきれないほどのフレームワークが存在します。
すみません・・・。


個人的には2006年くらいから開発業務している私にとって
コマンドひとつで環境が自動的に構築できるようになってきたことが脅威と感じます。
それはパッケージ管理システムが潤沢に機能するようになったことが要因です。
Linuxには早くから機能が実装され、BSD系であればports、Debia系であればapt、Redhat系であればyumというコマンドが代表的です。
(2006年当時はyumは無くてrpmを自分でかき集めてインストしていた…)

これがプログラミング言語でもサポートし、
RubyであればGems、Node.jsであればnpmのコマンドを使えばサクサク環境が構築できます。
便利な時代になりました。

NOSQL

システム開発にてデータを保存する際、Oracle,MySQLをはじめとするリレーション型のデータベース(RDBMS)が一般的に使われてきました。SQLと言われる言語を用いて、データを登録・更新・削除を行うシステムです。データ間に連携がある場合にもSQLは柔軟に対応しており、SQLを覚えることはデータベースアクセスに必須の言語でした。

 

昨今では、NOSQLと言われるデータベースが登場しつつあります。SQLを使わずにデータを登録・更新・削除する仕組みです。


個人的に私が経験したNOSQLなデータベースは以下です。

Apache River

私が経験したときはまだSunMicrosystemsが運営しておりJiniと言われていました。Javaのクラスをネットワーク上に共有する分散システムです。ストレージではなくネットワーク上の共有空間に、問合せやトランザクションが張れる仕組みでした。
※jiniはNOSQLという言葉が出てくる前の遠い昔の技術です・・・。

Apache River -

 

Realm

モバイル向けDBから始まったデータベースです。RealmObjectを継承したクラス単位にデータ保存が可能です。Androidアプリ開発では非常に便利に使えました。

realm.io

 


いま気になっているデータベースはこれです。

MongoDB

大量データを捌くために開発されたデータベースです。
JSON単位でデータ保存が可能。利用率は世界第4位との情報も見受けられます。 www.mongodb.com

 

 

あとは大手クラウドは以下のようなサービスを展開しています。

 

Firebase

Google社が運営。GoogleCloudPlatformと連携可能。MonogoDBから始まってリアルタイムデータベースへ。データの変更がAndroidへリアルタイムにプッシュされたりします。

またモバイル側がオフラインでもモバイル側のキャッシュで動作するので、サーバレスなアプリが開発も可能と言われています。

firebase.google.com

 

DynamoDB

Amazonが運営。AWSで利用可能なデータベースです。

aws.amazon.com


CosmosDB

Microsoftが運営。Azureで利用可能。

azure.microsoft.com

 

CSSフレームワーク

PCでもタブレットでもスマホでも
Webサイトが綺麗に見れる「レスポンシブWebデザイン」

レスポンシブ対応のWebサイトを構築する上で
近道としてはCSSフレームワークと言われるものを適用するという方法があります。

※ただしCSSフレームワークによってはカスタマイズが利きにくいものや、
 他のライブラリと競合すると場合があるので、実際に使用する際は吟味しましょう。

昨今注目されているCSSフレームワークを挙げてみます。

 

BootStrap

getbootstrap.com

広く用いられているので、機能やテーマが多かったり、
困ったときの情報検索で引っかかることも多いです。
ただしclassがガチガチに定義されているので競合することが多く、
また機能が多い分データ容量が大きく、表示が重たいという難点もあるようです。


Foundation

The most advanced responsive front-end framework in the world. | Foundation

Bootstrapと同じくらい豊富な機能があり、
Bootstrapの次くらいにメジャーなフレームワークです。


UIKit

getuikit.com

マテリアルデザインのページが作れるフレームワークです。
UIコンポーネントも豊富かつ綺麗で、class設計も比較的わかりやすいです。

 

GoogleMapAPI

今更ですが、2018/06/11より、GoogleMapAPIがGoogleMapsPlatformに変わったそうです。これによって料金体系がガラリと変わったみたいです。

 

APIKeyを取り直さないといけなさそうだったりするのかな・・・汗

cloud.google.com

 

個別料金表(※2018/07/16から適用)

cloud.google.com

 

以下は関連サイト情報

www.marie-web.design

 

jp.techcrunch.com

 

maps.multisoup.co.jp

 

Firebase

Firebaseをご存知でしょうか。

Googleが提供するサービスです。
一言で説明できないくらい用途が多岐に渡っており
ごった煮のように見えます。

・リアルタイムデータベース
・クラッシュレポート解析
クラウドストレージ
・認証システム
ホスティング
・アプリテスト
・アプリのパフォーマンス分析
・メッセージ通信
・アプリのリモート設定
・広告


正直、方向性が無いように見えますね・・・。
ただ、根幹はリアルタイムデータベースにあるように思います。
(リアルタイムデータベースで実現しているように見える)

サーバ側で値が変化すると、自動的にアプリ側へPush通信される
(アプリ側でPull通信する必要がない)
ところが「リアルタイム」といわれています。

また、アプリがオフラインだとしても
内部で持っているキャッシュを使って処理を行い
オンラインになったときに同期するそうです。


アプリ開発者にとってサーバとの同期処理や通信、データベース処理は
なかなかめんどくさい部分になりますが、
このまわりをフォローしてくれるのはとても良い技術のように思います。
Googleが「アプリをすばやく作成」と言っているだけあるように思います。


ただしリアルタイムデータベースは
JSONベースのNoSQLになっているので、
リレーショナルデータベースに慣れた技術者には
敷居が高いように思います。

RealmのようなNoSQLなデータベースが増えてきているので、
多様なデータベース技術についても身につけていく必要がありそうです。

 

firebase.google.com

 

プログラマが知るべき97のこと

プログラマ向けの技術書や自己啓発書は数多くあります。

以下で、内容がサイトへアップされているところを見つけました。

 

xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com

 

自己啓発系については、全部鵜呑みにせず

本当に自分に必要なものなのかを精査しながら読むとよいと思っています。

まだ2~3エッセイしか読んでいませんが、

なるほどなぁと思うことが多かったです。

 

あとは、以下の書籍が気になっていますが、まだ手が出ていません。

www.oreilly.co.jp

 

AI人材育成講座 開催予定だそうです

日経新聞で、
AIに関する人材育成講座が札幌で開かれるという情報がありました。



札幌にてAI人材育成講座を開催。

札幌の以下3社が企画運営。
産学官組織「SAPPORO AI LAB」
・サツドラHLD傘下「AI TOKYO LAB」
・北海道ソフトウェア技術開発機構

 

内容としては、AI開発に必要な知識やビジネス活用方法など。
基礎から応用まで5コースの口座を6月14日から札幌市内で開催予定。
対象は企業経営者からエンジニアなど幅広く受け入れる。

 

上級者向け講座では、
機械学習や画像認識の演習を通じたAI活用方法を5日で学べる。
AIプランナー育成講座では、開発時の知的財産の扱いを学ぶ。


受講料
入門編の2講座は無料。
AIエンジニア講座:32万4000円
ディープランニング講座:6万4800円
※AIエンジニア講座は経済産業省の補助対象予定。
 個人受講者は最大7割が補助対象見込み。

#なかなか高いですね。

 

詳細は以下サイトのようです。

http://www.s-ail.org/img/news/pdf/workshop_180601.pdf

 

 

企画運営をしているSAPPORO AI LAB様では、札幌市コールセンターデータを活用したAI自動応答システムなどを試験構築なさっているようです。面白そうですね。

www.s-ail.org

 

むかしむかし、自然言語構文解析で、CabochaやChaSenを使ったことがありますが、いまではDeepLerningを使ったりするのですね。

CaoboCha: Yet Another Japanese Dependency Structure Analyzer

chasen legacy -- an old morphological analyzer