-
弊社社員が会津若松市市政だよりに掲載されました
会津若松市の市政だよりの特集「会津で働く∞」で弊社社員の吉澤誠明が紹介されました。 市政だより2019年8月1日号 彼の担当業務は? 吉澤は弊社では主にバックエンド(サーバー管理)を担当するエンジニアです。最近はAWSなどのクラウドコンピューティングサービスを利用したシステム設計・構築を主に担当しています。彼は入社して2年ほどになりますが、バックエンド担当の中心人物として活躍しています。 彼の性格は? 市政だより本文に「笑顔を見せます」などと書かれている通り、彼の笑い声はいつも大きく、周りを和ませてくれる存在です。業務の都合上PCに直面している時間が長いため、周囲との明るいコミュニケーションはちょっとした気分転換なります。まさに彼は会社のいい雰囲気を作り出しており、エンジニアとしても会社のムードメーカーとしても頑張ってくれています。 プライベートでは奥様、お嬢様を大切にしており、料理などもする、家庭的な側面も持っています。 最後に この市政だよりの特集ではものづくりの現場で働く若い社員の方々を多く紹介しています。弊社も若い世代の従業員がエンジニアの中心となって活躍している会社の1つです。一方、会津大学には他県から多く進学しているにも関わらず、その卒業生のほとんどが他県に就職しているのが現状です。 吉澤が弊社で働いているように、他県から会津大学に進学しそのまま会津若松市で働き続けられるような会社がもっと増えてほしい、と願っています。
-
React NativeのUIコンポーネント「NativeBase」のButton UIが横幅いっぱいにならないようにする方法
React Nativeの開発で、デザインがよほどオリジナルではない限りUIコンポーネント「NativeBase」を使うケースは少なくないと思う。各プラットフォームのスタイル適用を省略できることがメリットだからだ。 なかでもButton APIは重宝されているのではないだろうか。そもそもButton APIはReact Native標準コンポーネントのView APIとTouchableOpacity APIをラップしたもので、タップすると半透明になり、Material Design風にスタイルされている。 これを独自コンポーネントで定義するのは、なかなか面倒で骨が折れる。よほどオリジナルなデザインでない限りは、使い勝手のよいコンポーネントAPIだ。 さてNativeBaseのButton APIを考えなしにView APIなどのレイアウトコンポーネント内に配置すると横幅いっぱいに表示される問題に遭遇する。fullプロパティを付与していないにも関わらずだ。 このエントリーでは、Buttonが横幅いっぱいにならないようにする方法を紹介したい。 まずJSX内に見えるContainerとContentタグもNativeBaseのコンポーネントAPIだ。いずれもReact Native標準コンポーネントのView APIが基になっている。 重要なところは、Contentタグのstyle={{alignItems:’flex-start’}}だ。CSSのalign-itemsプロパティにより左寄せにしている。そもそもalign-itemsは、縦方向に関わるものなのだが、View APIの主軸は縦方向だ。つまりflex-direction:columnのような状態になっている。 主軸が縦方向(column)の場合は、align-itemsは横方向に関わる指定に変わるため、flex-startで左寄せになったというわけだ。 これはContainerやContent以外のレイアウトコンポーネントであっても同様である。たとえばViewタグに内包されるような場合は、Viewタグにstyle属性を付与すればよい。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。
-
「きたねえCSSだ」って言われないようにするには?CSSプロパティ順序付けに言及している記事6選
CSSプロパティに順序付けする習慣があることを知っているだろうか?width,heightやmargin,paddingなどのCSSプロパティのことなのだが、実はこれらには記述する順序が存在する。 順序といってもスタイルの優先順位の話ではない。あくまでコーダーが気をつけるべき程度のことなのだが、順序付けを講じたものとそうでないものでは、可読性の良し悪しが表れる。クオリティはもちろんのこと、その後の運用にも影響を及ぼすほどにだ。 たとえば目当てのプロパティを探すとき、順序付けで定められた辺りを確認すればよいものを、セレクタごとにバラけていたら大変効率が悪い。見付けづらいし、気持ち悪い。 CSSプロパティの順序付けを遵守しているマークアップエンジニアに発見されたら、間違いなく「きたねえCSSだ」と罵られるに違いない。 そういう事態にならないためにも、最低限のポイントは抑えておきたいものだ。 このエントリーでは、CSSプロパティの順序付けに言及している記事やサイトをいくつか紹介したい。 順序付けに言及している記事一覧 https://qiita.com/akuden/items/e9c91a7a2b0596d53fd1 CSS3のプロパティ順序も言及している。 視覚整形モデル(display,position,float etc…) 視覚効果(overflow,visibility etc…) ボックスモデル/テーブル(margin,padding,border etc…) 背景(background etc…) 画像(object-position etc…) 色(color etc…) フォント/テキスト(font,text-align etc…) マルチカラム(columns etc…) 生成コンテンツ、自動番号付け、リスト(list-style,quotes etc…) ユーザーインターフェイス(cursor,outline etc…) アニメーション(transition,animation etc…) 印刷 音声 https://9elements.com/css-rule-order/ sassの@extendや@mixin、その他clearfixにも言及している。 SASS INHERITANCE(@extend,@mixin etc…) GENERATED CONTENT(content etc…) POSITION AND LAYOUT(position,float etc…) DISPLAY AND VISIBILITY(display,opacity etc…) CLIPPING(overflow etc…) ANIMATION(transition,animation etc…) BOX MODEL(margin,padding…
-
react-native-router-fluxのタブバーに通知バッジを表示させる方法
react-native-router-fluxには、タブUIを構成するTabs APIが用意されている。スマホアプリ特有のスクリーン下部に配置されたユーザーインターフェースで、各タブメニューは、それぞれのスクリーンを表し、Routerとして機能するわけだ。 ところで、いずれかのスクリーンで新着メッセージなどがあることを知らせるために通知バッジを使うことは一般的だろうと思う。そしてこのような場合、通知バッジの配置場所として、タブUIに寄り添う形にすることも有り得ることだと思う。 しかしタブUIを構成するTabs,Scene APIに通知バッジを表示させるであろうプロパティが見当たらない。 断念せざるを得ないのだろうか?別の箇所に配置せざるを得ないのだろうか? 否だ。通知バッジを反映させる専用のプロパティは無いが、少しカスタマイズすればタブバーにも通知バッジを配置することができる。カスタマイズといってもネイティブのソースコードではなく、あくまでJavaScript内の話だ。 このエントリーでは、React Nativeのナビゲーションライブラリ「react-native-router-flux」の、タブバーUIに通知バッジを表示させる方法を紹介したい。 通知バッジを配置する Scene APIのiconプロパティ(props)を見てほしい。ホームスクリーンのSceneタグのiconには、矩形用のViewタグでIconタグとTabbarBadgeタグ、TabbarBadgeTextタグが確認できると思う。TabbarBadgeとTabbarBadgeTextはstyled-componentsライブラリでスタイルするためのタグで、名称は任意だ。const TabbarBadge = styled.Viewとconst TabbarBadgeText = styled.Textが代入している行になる。 果たして、タブに通知バッジが表示されるはずだ。
-
フォーム離脱防止に寄与!フォームデータを永続化するJavaScriptライブラリ「FormPersistence.js」の使い方
フォームに入力した内容が、思わぬ操作によって消え去ってしまった経験はないだろうか。 入力中にページ遷移したり、ブラウザを閉じたりすることで、せっかく入力した内容を失ってしまう。ユーザーはそんなときどうするだろう。 きっとそのサービスを離脱するに違いない。貴重な時間を割いて入力、および選択した内容が忽然と消えてしまうのだから無理もない。たとえそれが本人の不注意によるものだったとしてもだ。 このような事案回避にピッタリなJavaScriptライブラリがある。 このエントリーでは、フォームデータを永続化するJavaScriptライブラリ「FormPersistence.js」を紹介したい。 FormPersistence.jsについて フォームデータを保持するJavaScriptライブラリだ。フォーム項目の入力と選択は、localStorageあるいはsessionStorageに保存される。永続化したデータは、ページ遷移やフォーム更新、再訪問時にフォームに反映が可能だ。 特徴 フォームデータの永続化 HTML要素にライブラリ特有の記述なし JavaScriptの記述は、最小で2行あれば実行可能 FormPersistence.jsを触ってみる 入手する npm (or yarn) でインストール CDNで読み込む jsDelivr 使用する HTML JavaScript 設定する persistメソッド 永続化するフォームとして定義する。 saveメソッド フォームデータをストレージに保存する。 loadメソッド ストレージからフォームに反映する。 clearStorageメソッド ストレージからフォームデータを削除する。 serializeメソッド フォームデータをJSON文字列に変換する。 deserializeメソッド JSON文字列をオブジェクトに変換してフォームに反映する。 まとめ フォームデータを永続化するJavaScriptライブラリ「FormPersistence.js」の紹介だった。フォーム入力が不慮の行為で消えてしまうことが想定される場合にも、フォームデータが永続化されていれば、サイト離脱は免れるかもしれない。ぜひとも実装しておいてもらいたい機能だ。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。
-
Web Speech APIの音声認識と音声合成を使ってみる
音声入力で検索したときのことだ。「イオンシネマ」と発声すると「4シネマ」の検索結果が表示されて、とても悲しい気持ちになったわけだが。 そんなことがあったためか、Webの音声認識APIはどんな状況なのか気になってしまった。 このエントリーでは、Web Speech API を触った結果を共有したい。 Web Speech APIとは Web Speech API は音声データを操作するWeb APIだ。 おもに音声認識と音声合成の機能を提供している。音声認識はマイクを介した音声を文字列として返し、音声合成は文字列を読み上げる、というものだ。それぞれSpeechRecognitionとSpeechSynthesisインターフェース経由でサービスを利用することになる。 Web Speech APIの対応状況 Web Speech APIの対応状況がどのような具合なのか確認してみよう。以下は、音声認識のSpeechRecognitionインターフェースと音声合成のSpeechSynthesisインターフェースの対応状況をCan I use… で調べた結果だ。 SpeechRecognitionの対応状況 https://caniuse.com/#feat=speech-recognition ブラウザ対応はほとんど進んでおらず壊滅的といえる状況だ。各種ベンダーはWebにおける音声認識に期待をよせていないのだろうか。とりあえずChromeを使っとけば大丈夫そうだ。 Chrome部分的なサポートとのことで、webkitのプレフィックスは必要。 Firefoxabout:config設定ページの「media.webspeech.recognition.enable」を有効にすることで使える。 OperaSpeechRecognitionインターフェースに対応しているようだが、イベントを捕捉しない。 SpeechSynthesisの対応状況 https://caniuse.com/#search=SpeechSynthesis SpeechRecognitionの状況とは反して、こちらは広くサポートされていることがわかる。文字列の読み上げには関心があったのだろうか。 Chrome バージョン55以降のWindows7と10、その他プラットフォームで、約15秒後に停止するバグあり。 Firefox バージョン49未満の場合は、about:config設定ページの「media.webspeech.synth.enabled」を有効にすることで使える。 音声認識を使ってみる HTML JavaScript 音声合成を使ってみる HTML JavaScript まとめ 以上がWeb Speech API の触ってみた結果だ。音声認識と音声合成のソースコードは体験するにあたり、もっともシンプルな内容としている。実際は、各種イベントやプロパティが用意されていて、もっと複雑な実装もできるはずだった。 実案件に使う予定は無いが、Web Speech APIに触れたことは良い経験値になったと思う。もし関心がもてたならば試してみてはどうだろう。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。
-
背景画像の繰り返しに頼らない!CSSでストライプを作る方法
Webデザインのストライプ柄をコーディングするには、繰り返しできるか否かを見極めて切り出し、背景画像をリピート表示する。しかしこの手法には問題もある。 たとえば斜めストライプの場合だ。斜め線の角度が45°ならば、かろうじて繰り返しラインを見つけやすいが、この条件を外れると判別がつかない。つまりリピート表示用の画像を切り出すことができないということになる。 代替案は、対象エリア以上のサイズに切り出すことで、可変しても見切れることがないようにするというものがある。 ただデザインデータが、対象オブジェクトにストライプパターンを適用している場合は、当該オブジェクト以上のサイズに修正しなければならない。 また対象エリア以上の画像を配置するというのは、必要以上に大きな画像データを読み込むことに繋がり最善な策とは言い難い。 そんな場合には、CSSのみで対処できないか検討してみてはどうだろう。 このエントリーでは、CSSでストライプを表現する方法を紹介したい。 縦のストライプ(罫線)を書く repeating-linear-gradient関数を使う 90deg,で直角にする #FFF, #FFF 6px,で始点から6px地点まで#FFFにする #FF6C60 6px, #FF6C60 7pxで6px地点から7px地点まで#FF6C60にする See the Pen Untitled by Takuya Takaku (@takuya-takaku) on CodePen. 斜めのストライプ(罫線)を書く linear-gradient関数を使う background-sizeで繰り返すサイズを指定する -45deg,で角度をつける #fff, #fff 48.5%,で始点から48.5%地点まで#fffにする #FF6C60 49.5%, #FF6C60 50.5%,で49.5%地点から50.5%地点まで#FF6C60にする #fff 51.5%, #fffで51.5%地点から終点まで#fffにする See the Pen Untitled by Takuya Takaku (@takuya-takaku) on CodePen. まとめ 以上がCSSでストライプを表現する方法の紹介だ。ご覧のようにグラデーションを表現するCSS関数(linear-gradient or repeating-linear-gradient)が使われている。…
-
パララックス効果を与えるとても簡単なJavaScriptライブラリ「simpleParallax.js」の使い方
パララックス効果は数年前にトレンドとなって、いまでもWebデザインの表現に欠かせない要素のひとつであるが、しかしその表現はさまざまで、複雑さを増している印象がある。 そんな影響を受けてかパララックスライブラリも高機能になっていき、使いにくい状況になってしまっている。さらにサイト設計に関わるJavaScriptフレームワーク(ライブラリ)との依存性も考えなければならない。 そのような訳で、パララックスの実装に苦手意識をもっていないだろうか?できれば、「パララックス効果を含んだデザインを入稿しないでね」って具合に。 でも大丈夫。実装がとても簡単なJavaScriptライブラリがある。 このエントリーでは、パララックス効果を与えるJavaScriptライブラリ「simpleParallax.js」を紹介したい。 simpleParallax.jsとは パララックス効果を与えるJavaScriptライブラリ。simpleParallax.jsはvanilla JS製で、他フレームワークやライブラリに依存することはなく実装できる。vanilla JS製であることからわかるとおり、非常に軽量であることとシンプル実装が特徴だ。 特徴 vanilla JS製で他ライブラリに依存しない CSSハードウェアアクセラレーションの考慮 画像がターゲットで、余計なHTML要素を書かない simpleParallax.jsを触ってみる それではsimpleParallax.jsのインストール方法と使い方について話そう。 取得する 公式サイトからダウンロード https://simpleparallax.com/ npm (or yarn) でインストール CDNで読み込む jsDelivr 初期化する HTML JavaScript 以上だ。これでパララックス効果が付与される。画像を梱包するHTML要素はいらない。simpleParallax.jsが梱包div要素を生成してくれるからだ。 設定する name type default hint orientation string up up – right – down – left – up left – up right – down left – left…
-
elm環境をコマンド一発で作る「create-elm-app」スターターキットの導入方法
SPAに代表されるReactには、create-react-appなるスターターキットが用意されている。これはReact開発環境を構築してくれるものだ。即座に開発を始められるようセットアップされいるため、プロジェクトの導入時に利用するケースも少なくない。 これと同様にelmにも、create-elm-appが存在する。elmを触れてみたいと思っていてもなかなか実現しなかった場合にも役立つものだと思う。 このエントリーでは、create-elm-appを紹介したい。 create-elm-appとは elm新規プロジェクトのスターターキット。ワンコマンドで、ローカル開発環境を構築してくれる。 特徴 コマンド一発で環境構築 ホットリロードしてくれる Boilerplateとして活用 create-elm-appを触ってみる create-elm-appのインストール create-elm-appインストールには、Node.jsのバージョン8以上が必要だ。未インストールやバージョンが低い場合は、事前に対応してもらいたい。 プロジェクトを作成する 無事インストールは済んだだろうか。問題なければ、早速プロジェクトを作成してみたい。プロジェクトを作成したいディレクトリに移動して以下コマンドを実行する。<project-directory>に、任意のフォルダ名を記述することで、当該フォルダが生成される。 果たして、elm環境のセットアップが確認できる。環境の構造は以下のとおりだ。 .├── .gitignore├── README.md├── elm.json├── elm-stuff│ └── 0.19.0│ ├── Main.elmi│ ├── Main.elmo│ └── summary.dat├── tests│ └── Tests.elm├── public│ ├── favicon.ico│ ├── index.html│ ├── logo.svg│ └── manifest.json└──…
-
Webサイトにエディタ実装なら!ブロックスタイルのWYSIWYGエディタ「Editor.js」の設置方法
Webアプリで入力を受け付けるコンテンツにtextareaタグがある。これは複数行テキスト入力が可能なコンテンツだ。メールフォームなどのフリーテキストの入力を求める場合に設置することが多く、お問い合わせページやアンケートページなどに入力した覚えがあるのではないだろうか。 このtextarea要素は、複数行入力できるとはいってもプレーンテキストであって、文字入力だけ許されている。機種依存ではあるが、絵文字を表現する程度だろうか。 もし太字や文字サイズをカスタマイズするような要件には向かない。というかtextareaで、これらカスタマイズはできない。文字通りテキストエリアなのである。 それに対して「WYSIWYGエディタ」ならば、太字や文字サイズ、見出し、リストなど表現できるものだ。管理WEB案件ではWYSIWYGエディタを求められるケースも少なくない。 このエントリーでは、WYSIWYGエディタフレームワーク「Editor.js」の紹介をしようと思う。 WYSIWYGエディタとは WYSIWYGエディタ(ウィジウィグエディタ)とは、ディスプレイ画面上で表現した内容そのままを出力するエディタのことで、太字や文字サイズ、画像挿入などをサポートしてくれる。直感的に操作ができることからリッチテキストエディタとも呼ばれ、CMSやブログの管理画面には無くてはならないパーツのひとつである。 Editor.jsについて Editor.jsは、リッチテキストエディタを実装するためのフレームワークで、ブロックスタイルを採用している。ブロックスタイルというのは、かつての単一入力エリアと異なり、入力エリア内でさらに個別のブロックで構成されていて、それぞれ見出し、段落、リスト、画像を担う。これらブロックは、プラグイン定義することで拡張できるように設計されている。 https://editorjs.io/ 特徴 JSONデータ出力 他ライブラリに依存しない 独自ブロックスタイルを作れる オープンソース インストール npm CDN https://www.jsdelivr.com/package/npm/@editorjs/editorjs 設定 Editor.jsの初期化は、いたって簡単でマウント用のHTML空要素とモジュールパッケージをインポートすればよい。以下のとおりだ。 HTML JavaScript プラグイン設定 Editor.jsのブロックで、それぞれプラグイン定義することで拡張できるように設計されているということだった。必要な機能はプラグインで追加していく仕様となっている。 ちなみに段落ブロックはすでに組み込み済みで、プラグイン設定は不要だ。上記のとおり初期化するだけで段落ブロックは機能する。 見出し リンク HTMLブロック 画像 画像(バックエンド要件なし) チェックリスト リスト 埋め込み 引用 以下は、見出しとリストのプラグインを追加した例だ。headerとlistプラグインのimportに際して、事前にインストールしなければならない。インストール方法は、上記リンクのREADME.mdから確認してほしい。 サンプル まとめ Editor.jsのよいところは、特定のライブラリに依存しないところだろう。jQueryやReact、Angular、Vueのいずれとも併用することができる。そして出力データは、JSON形式に生成される。HTML形式で出力されるものと違って、オブジェクトデータの扱いやすさはご存知のとおりだと思う。この違いは大きい。管理Webサイトにリッチテキストエディタの実装を求められた場合、「Editor.js」は、よい選択になり得るかもしれない。 ブロックスタイルのリッチテキストエディタで対抗馬になるのは、Wordpress管理画面に実装されている「Gutenberg」あたりだろうか。Gutenbergのパッケージモジュールがあるようだが、残念ながら使ったことが無いから、その詳細はお伝えすることができない。もし知見を得る機会があれば、比較記事を書こうと思う。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。