-
いますぐ使えるinput,select,textarea要素のCSSイディオム集
コーディングで手間がかかる要素といえば、フォーム周りではないでしょうか?ブラウザ固有のUIがあったり、ユーザーの操作によって状態に変化があったりと一筋縄にはいきません。 そのような訳で、フォーム周りのコーディングが面倒だと感じている人は少なくないはずです。私がその筆頭に君臨します。デザインに引っ張られることで、毎案件で一貫性がないソースコードを披露してしまう始末。大概フォーム周りは後回しにしてきました。 それが最近ようやく、まとまりのあるコーディングをするようになったと感じています。その一端をご覧ください。 イディオムとは いわゆる慣用句のことで、プログラミングやマークアップにおける定型文をイディオムといいます。 慣用句は、ふたつ以上のものが結合して、まったく別の機能を持つことを表します。 したがって、小さな要素の集まりからなるコンポーネント単位のソースコードも同様です。 きっとあなたも決まった書き方をするコンテンツがあると思います。それがイディオムです。 イディオム集 イディオム集には、input,select,textarea要素を用意しました。スタイルはSCSS形式で記述しています。「いますぐ使える」を目的としたため、コピペで使える状態です。したがって共通している箇所は適宜修正する必要があります。またサイズやボーダー、カラーはデザインに合わせて修正してください。 Input要素 テキストボックス See the Pen Untitled by Takuya Takaku (@takuya-takaku) on CodePen. サーチテキストボックス See the Pen Untitled by Takuya Takaku (@takuya-takaku) on CodePen. チェックボックス See the Pen Untitled by Takuya Takaku (@takuya-takaku) on CodePen. ラジオボタン See the Pen Untitled by Takuya Takaku (@takuya-takaku) on CodePen.…
-
MacでLinuxのブータブルUSBを作る
サーバにLinuxをインストールする際にブータブルUSBを作成するのですが、いつも手順を忘れてしまうため備忘録として記事に残します。 ブータブルUSBとは USBメモリからLinuxを起動する仕組みです。 起動したLiveイメージからHDDへのインストールを行う他、 USBメモリを接続するだけでほとんどのPCでLinux環境を起動できるので「WindowsPCにブータブルUSBを刺してLinuxを起動し、CUIでHDDのファイルをコピーする」というような使い方もできます。 ブータブルUSBを作る 「UNetbootin」というGUIのツールで作成することもできますが、私はコマンドラインで作成したい派なのでCUIでの作成手順をまとめます。 https://unetbootin.github.io/ まず作成するUSBメモリを接続し、diskutilコマンドでディスク情報を確認します。 今回使用するUSBメモリは4Gのものですので/dev/disk2が該当のディスクということが分かりました。 USBメモリにイメージの書き込みを行うため、アンマウントします。 USBメモリをアンマウントできたら、メモリに書き込むLinuxのイメージを作成します。 今回はCentOSを使用したいのでCentOSのisoファイルをダウンロードしました。 ダウンロードしたisoファイルをimg形式に変換します。 変換が完了したらimgファイルをUSBメモリ(/dev/disk2)に書き込みます。 少々時間がかかりますが、完了するとブータブルUSBの作成は終わりです。 あとは作成したUSBを対象のPCに接続し起動するとLinuxのLive環境を起動できます。(BIOSの設定が必要な場合もあります。)
-
flexboxでリキッドレイアウト(固定+可変)にする方法
このエントリーでは、flexboxでリキッドレイアウトを表現する方法をお伝えします。可変カラム+固定カラムが横並びになるレイアウトにするとき使えるスタイルです。 リキッドレイアウトとは リキッドレイアウトは、可変カラムと固定カラム構成の名称です。ブラウザのサイズやデバイスの違いを柔軟に表示する概念です。 2カラム、あるいは3カラム構成からなるレイアウトが一般に見られるのではないでしょうか。 たとえば、サイドメニューが固定幅で、メインコンテンツが可変幅などが代表的です。 flexboxのリキッドレイアウトが使えるケース レスポンシブデザインに最適 固定、可変する要素があるとき フォームのラベルと入力要素が並ぶとき 使い方(2カラム) 2カラムレイアウトを例にHTML/CSSを記述します。各々のレイアウトに置き換えてご覧ください。 HTMLでは、梱包要素のwrapperクラスと固定カラムのsideクラス、可変カラムのmainクラスが確認できます。 CSSでは、まず梱包要素のwrapperクラスにdisplay: flex;を適用することでフレックスコンテナボックスにすることが目的です。それにより小要素は横並びになります。 続いて、sideクラスにwidth: 300px;の横幅を与えて固定値とします。 最後に、mainクラスにflex: 1;の指定で可変を実現します。flexプロパティはflexのスタイルカスタマイズする省略プロパティです。CSSショートハンドといいます。リキッドレイアウトを実現するにあたって厳密にプロパティを指定する必要性が無いため割愛しますが、気になる方は別途調べるとよいでしょう。[flex – CSS: カスケーディングスタイルシート] まとめ 以上がflexboxでリキッドレイアウトにする方法でした。必要なHTMLは、梱包要素と固定カラム、可変カラムです。必要なCSSは、梱包要素にdisplay: flex;と固定カラムにwidth: ~~px;、可変カラムにflex: 1;と覚えてください。 きっと活用できるケースがあると思い記事にしました。マークアップの一助となれば幸いです。
-
Node.js + Babelで「ReferenceError: regeneratorRuntime is not defined」となる場合
ES6で開発し、Babelでトランスパイルしたものをnode transpiled.jsの形で実行していますが、 「ReferenceError: regeneratorRuntime is not defined」のエラーが表示されるようになりました。。。 環境 package.json .babelrc 原因 await-aysncが原因らしいです。 Webpackの設定などで解決する情報はありましたがNode.js + Babelで解決するのに手間取ったので備忘録として。 対策1 調べたところによると.babelrcを以下のようにすると良いと発見したので早速変更 .babelrc Error: Cannot find module ‘@babel/preset-env’ もちろんインストールしていないのでエラー yarn add @babelとしても同じエラーが。。。 yarn add @babel/preset-envでインストール? と試してみるが次は以下のエラー Error: Cannot find module ‘@babel/core’ yarn add @babel/coreと不足しているパッケージをインストールし続けるのは違う、と思ったので別の方法を模索。。。 対策2 babel-polyfillをインストールしてトランスパイル対象のファイルにimport babel-polyfill;を記述することで解決。 という情報を発見。 そんなにシンプルに解決するのか半信半疑でしたが試してみることに。 yarn add –dev babel-polyfillとしエントリーファイルにimport babel-polyfillを追加してyarn build 以外と呆気なく解決。。。
-
インスタ映えに挑戦!AWS Amplifyの認証画面をInstagram風してみた
「インスタ映え」が、2017年のユーキャン新語・流行語大賞にノミネートされてから久しく、今日ではたくさんの写真がシェアされている。 そもそもインスタ映えとは、Instagramにシェアした写真が、見栄えよく映えることを表現した言葉だ。そしてフォトジェニック的な意味合いで用いられることもある。「それ映える!」など、写真にしたとき心が動かされる様を表す感動詞的な用法なのかもしれない。 それならば思うところがある。AWS Amplifyの認証画面をInstagramっぽくしたら、それはもう「インスタ映え」ではないだろうか。と、勝手に解釈してみることにした。 それではさっそくAWS Amplifyの認証画面をInstagram風にして「インスタ映え」なのかを検証してみようではないか。 インストール 「a-theme-react」をインストールする。 a-theme-reactは、AWS Amplify UIテーマをカスタマイズできるパッケージだ。 テーマを変更する テーマをカスタマイズするまえに、デフォルトのUIをご覧いただきたい。 シンプルな認証画面であることが分かっていただけたと思う。このUIをInstagram風に変更するわけである。 テーマを適用する 以上がテーマ適用の記述だ。まったく難しいことはない。a-theme-reactをimportして、theme propsにセットするのみでカスタマイズ完了だ。 「インスタ映え」だったか? 答えは簡単だ。これは「インスタだぜ!」だ。感動詞的ではあるが、「インスタ映え」ではなかった。 もし実装することがあれば、「インスタだぜ!」と自慢してみてほしい。
-
CSSフレームワークBootstrapのダイアログを秒速で実装する「bootbox.js」が超便利
CSSフレームワークといえば、Bootstrapといえるほどのネームバリューを誇ります。使用を検討する場合は筆頭候補といえるでしょう。次の画像は「npm trends 」でトレンド調査した結果です。 圧倒的といえるほどのダウンロード数です。新進気鋭の有望なCSSフレームワークがリリースされても、Bootstrapが依然としてトップに立っていることがわかります。 なぜこれほどまでに人気であり続けられるのでしょうか?それには次のようなことが挙げられます。 効率がいい開発を図れる 洗練されたCSS設計(アーキテクチャ)の採用 HTMLモックをすばやく作成できる ルールに沿った使い方で開発速度アップを見込める HTMLにクラス付与するのみの簡単実装 充実したユーザーインターフェースが魅力 トレンドをおさえたアップデートが実施される 統一感のある構築ができる しかし一方で、特定のインターフェースを実装するにしてもHTMLとjQuery(JavaScript)の記述が必要です。Bootstrap経験があるエンジニアやデザイナーのなかには、 「ダイアログだけ使いたい。」「ダイアログを手軽に実装したい。」「HTMLとJavaScriptの記述が面倒くさい。」 という不満を覚えた人も少なくないのではないでしょうか?そこで本日の「bootbox.js」をお伝えしたいと考えました。 「bootbox.js」は、bootstrapダイアログボックス実装に特化したライブラリです。特筆すべきは実装がものすごく簡単です。JavaScript数行の記述でalertやconfirm、custom dialog、promptを作成できます。 基本的な機能 アラートダイアログ 確認ダイアログ プロンプトダイアログ カスタムダイアログ 導入 導入に際して、次のファイルを読み込んでください。 必要なファイル Bootstrap [CSSファイル] jQuery [JavaScriptファイル] Bootstrap [JavaScriptファイル] Bootbox [JavaScriptファイル] 読み込み例 読み込み例では、オンライン上のCDNから取得しています。適宜ダウンロードやnpmインストールを選択してください。 使い方 アラートダイアログボックス 注意を伝えるダイアログです。 基本的な使い方 簡易なアラートダイアログならば、一行で実装できます。 アラートダイアログの表示例です。alertメソッド引数の文字列がダイアログのラベルに表示されます。「Hello world!」となっていることがわかります。 コールバック設定 アラートダイアログが閉じたタイミングでコールバックが走ります。alertメソッドの第2引数に無名関数を設置することで、任意の処理を行うことができます。 確認ダイアログボックス OK/Cancelボタンを持つダイアログです。 基本的な使い方 確認ダイアログは、コールバックの設定が必須です。confirmメソッドの第2引数に無名関数を設置することで、任意の処理を行うことができます。OK/Cancelボタンのクリックの是非をコールバック値で判定します。 確認ダイアログの表示例です。confirmメソッド引数の文字列がダイアログのラベルに表示されます。確認ダイアログならではのOKとCancelボタンが表示されていることがわかります。 プロンプトダイアログボックス ユーザー入力を受け付けるダイアログです。 基本的な使い方 プロンプトダイアログは、コールバックの設定が必須です。コールバック関数では、ユーザー入力をコールバック値で取得することができます。ダイアログをキャンセル、またはCancelボタンをクリックした場合はnullになります。 ユーザーの入力を受け付けるインプットフィールドが設けられていることがわかります。…
-
Node.jsのHeadlessCMS「Strapi」を試す
こんにちは、ソリューションの五十嵐です。 Netlify CMS + GatsbyのようなJAMStackなブログが話題になっています。 弊社のブログもJAMStackな構成にしたいと思っていますが、Netlifyなどのサービスを利用するよりは自社のサーバにHeadlessCMSを構築したいと考えています。 調べたところによるとNode.jsで構築できる「Strapi」というオープンソースのHeadlessCMSがありましたので試してみようと思います。 https://strapi.io/ Strapi Strapiのインストールはnpmで行います。 公式のチュートリアル通りに以下のコマンドを実行しましょう。 インストールが完了したらstrapiコマンドでプロジェクトディレクトリを作成します。 公式ではMongoDBを推奨していますが、MySQL、PostgreSQLなども使用できるようです。 今回はMySQLで設定してみましょう。 DBはプロジェクト作成時に設定でき、MySQLの設定も簡単に行うことができました。 プロジェクトディレクトリが作成されたらそのディレクトリに移動しstartコマンドでstrapiを起動します。 無事起動すると以下のページで管理画面を開くことができます。 http://localhost:1337/admin Post作成 管理画面でユーザーを作成、ログインできたらブログ記事を投稿するためのコンテンツを作成しましょう。 コンテンツタイプの項目を選択します。 コンテンツタイプの追加を選び「Post」と入力し、記事コンテンツを作成します。 今回はサンプルなので記事コンテンツはString型のTitleとText型のDetailのみとします。 コンテンツは作成できましたがこのままではAPIで取得できませんので「ロールと権限 > public」から以下のようにチェックを入れ、権限を設定します。 これで記事の公開ができましたので実際にGETで取得してみましょう。 ブラウザでhttp://localhost:1337/postsにアクセスするとJSON形式のPostデータが取得できます GraphQL 最後にGraphQLでデータを取得できるようにします。 デフォルトでREST APIが有効になっているのでそのままでも良いのですが、今回はGatsbyのGraphQLからデータを取得する予定ですのでGraphQLを有効にします。 GraphQLを有効にするにはStrapiにプラグインを追加する必要がありますので、以下のコマンドでプラグインを追加しましょう。 これでGraphQLが有効になりましたので再度Strapiを起動し、http://localhost:1337/graphqlにアクセスしましょう。 GraphQLの実行環境が表示されるはずです。 まとめ Node.jsのHeadlessCMSであるStrapiを試してみましたが、思った以上に簡単に構築でき、GraphQLの有効化もプラグインのインストールだけで済みました。 手軽に構築できる点は良いと思うのですが、カテゴリやタグなどの設定を入れたり、マークダウンの記事エディタを入れたりすることは可能なのでしょうか。。。 その辺りは機会があれば検証してみたいと思います。
-
Node.jsで河川の水位データをスクレイピングする
こんにちは、ソリューションの五十嵐です。 私は釣りが好きで、休日はよく釣りに出かけています。 その際に国土交通省が提供している河川の水位情報をチェックして釣りのポイント選びなどに役立てています。 http://www1.river.go.jp/ この水位情報をもっと手軽に確認できるようにしたいのでNode.jsでスクレイピングして水位データを提供するAPIを作成してみます。 Node.jsによるWebスクレイピング まずNode.jsによるWebスクレイピングのライブラリとしてcheerioをインストールします。 インストールしたcheerioで試しにYahooのトップページをスクレイピングしてみます。 YahooのHTMLソースを取得することができました。 河川の水量データをWebスクレイピングしてみる 指定URLをスクレイピングできることが確認できましたので水位データのページも試してみます。 水位データのページはTopページと詳細ページに分かれており、目標のデータは詳細ページにあります。 しかし、詳細ページのURLとなるデータID?は随時更新されるため、Topページにアクセスし今のデータIDを取得する必要があります。 まずはTopページのスクレイピングを始めましょう。 このページに詳細ページのデータIDが含まれていますのでスクレイピングした結果から抽出します。 データIDを抽出する スクレイピングしたHTMLソースはjQueryのセレクタのような形で操作できますので以下のようにリンクのaタグにデータIDが含まれるかを判定します。 データIDの取得ができましたので詳細ページのスクレイピングを行います。 詳細ページのスクレイピング 取得したデータIDで再度スクレイピングを行います。 無事水位データを取得することができました。 ちなみに水位データは日付,時刻,水位(m)のようです。 まとめ 取得したデータをカンマ区切りで整形し、最終的に以下のようなJSON形式のデータになるように修正しました。 今回はデータの整形までを行いましたので次回はこのデータを提供するAPIと、それを利用するアプリケーションを作成したいと思います。
-
【elm】2019年にわざわざ学ばなくてもいい言語でTodoアプリを作る
「2019年にわざわざ学ばなくてもいい言語」 が発表されました。 https://www.codementor.io/blog/worst-languages-2019-6mvbfg3w9x CoffeeScriptを抑えて堂々の1位はElmとなりました。 残念なニュースではありますが、個人的には好きな言語ですのでElmで簡単なTodoリストアプリを作成してみます。 2019/07/01更新 コメントでご指摘頂きました。ありがとうございます!モジュールを分割せず1ファイルに修正し、GitHubにpushしましたのでこちらを参照するようにしてください。 ABAB↑↓BA より: 2019年6月28日 9:35 PM このモジュールの分割の分け方は公式ガイドで悪手とされています。1ファイルにまとめていただけると、混乱する方が減って嬉しいかもしれません。 https://guide.elm-lang.jp/webapps/modules.html Elmとは Elmは、コンパイルすることでWebアプリケーションを作成することができる純粋関数型言語です。 The Elm ArchitectureというアーキテクチャでWebアプリをModel-View-Updateという形にパターン化しています。 例えばユーザーのInputによって画面が更新されるWebアプリはThe Elm Architectureでは以下のようにパターン化されます。 環境構築 Elmのインストールはnpmで行います。 これだけでelmのインストールは終わりです。 次に作業ディレクトリを作りましょう。 ディレクトリを作成しその中でelm initコマンドを実行します。 以下のようにelm.jsonとsrcディレクトリが作成されれば完了です。 この状態でelm reactorコマンドを実行してみましょう。 elmのWebサーバが起動したらhttp://localhost:8000にアクセスするとElmの画面が表示されます。 実装 The Elm ArchitectureではModel-View-Updateの形でパターン化されますのでsrcディレクトリ以下にそれぞれのファイルと、エントリーポイントとなるMain.elmを作成します。 Model まずはModelから作成します。 Todoデータを格納するTodo型を作成します。 Todo型はString型のタイトルと詳細を持ちます。 Modelは複数のTodoデータを持ちますのでList型のtodosを宣言します。 初期値を設定します。 Todoリストの初期値は空にしたいので空のリストを設定します。 さらにTodo項目を追加するためのメッセージ(Msg)も作成します。 最終的にModelはこのようになります。 Update UpdateはMsgとModelを受け取って新しいModelを返します。 これはReduxのReducerがactionとstateを受け取って新しいstateを返す動きに似ていますね。 AddイベントはModelにTodo型のデータを追加します。 今回はサンプルなのでタイトルが「Todoタイトル」、詳細が「Todo詳細」となるTodo型のデータをModelに追加するようにしています。 View 次にViewを作成します。 Todoリストの項目をテーブルで表示しましょう。 viewTebleはModelのtodos(Todoリスト)を受け取ってテーブルを返す関数です。 elmではHaskellのような記述で関数定義を行います。…
-
記事内のソースコードをハイライトするWordPressプラグイン「CodeMirror Blocks」の使い方
「CodeMirror Blocks」プラグインは、ソースコードをハイライトします。 なんと100種類以上のプログラミング、スクリプト、マークアップ、メタ言語をサポート。および56種類ものテーマが用意されています。 技術系チュートリアル記事に最適なWordpressプラグインです。 特徴 軽量で軽い コーディング標準に従いコードを保護する 多岐にわたるオプションと直感的なUI クロスブラウザ互換 すべてのWordpressテーマと互換性あり RTL対応 翻訳の用意が整っている インストール プラグイン新規追加 「CodeMirror Blocks」をキーワード検索 「今すぐインストール」ボタンをクリック、「有効」ボタンをクリック 使い方 ブロック挿入アイコン「Code Block」をクリック 追加されたブロックにソースコードを入力 右メニュー「Language / Mode」から該当する言語を選択 右メニュー項目 Language / Mode該当するプログラミング、スクリプト、マークアップ、メタ言語を選択する Themeハイライトするテーマを選択する Show Line Numbers?行数を表示する Wrap Long Line?右端で折り返すか否か。 Editable on Frontend?記事画面のソースコード入力の可否 Disable Copy on Frontend?記事画面のソースコードコピーの可否