Sketch - テキストをSVGでExportする
なぜSVGなのか
最近、Webページを作成するときのロゴはなるべくSVGを使用するようにしています。 たとえば、自分が所属しているチームのWebサイトを新しくする際にロゴも一緒に新調したのですが、SVGで出力したロゴを表示しています。
拡大してもきれい
SVGは、Scalable Vector Graphicsの略称であり、XML形式の2次元ベクターイメージ用の画像フォーマット記述言語です。 また、ファイルサイズが小さいのも特徴であり、画像のクオリティを維持したまま拡大や縮小に対応できます。
上記の例のように、拡大してもビットマップ形式の画像に見られるジャギー(階段状のギザギザ)が発生しません。 様々なデバイスの表示に柔軟に対応できるので、レスポンシブデザインがトレンドになり始めたころからよく使われるようになったようです。
SketchでデザインしたテキストロゴをSVGで出力する
今回は、Takizawa Hackathon - Facebookページのシンプルなテキストロゴを出力してみます。後ほど、Webサイトを作成した際にヘッダーロゴとして使用します。
「Convert to Outlines」する
このまま、テキストをSVGで出力する前に、テキストレイヤーをベクターシェイプに変換しましょう。この作業をすることで、テキストを編集することができなくなりますが、あらゆるブラウザーで同一の表示とするために変換する方が良いと思います。
方法は簡単で、上部の [Layout] メニューから [Convert to Outlines] を選択するだけです。
変換が完了すると、各文字がベクターシェイプに変換されたことが分かります。
青くなっているのがアウトラインです。
SVGで出力する
あとは、右のサイドバーの一番下のExportメニューからFormat形式をSVGに選択して、出力すれば完了です。
参考
Rails5 - utf8mb4(主にiOSの絵文字)に対応する
実行環境
文字コードのutf8mb4に対応する
今回、主にiOSの絵文字に対応するためにutf8mb4
に変更する必要がありました。MySQLであればバージョン5.5以降でutf8mb4
をサポートしています。
以下がそのために行った設定です。
config/database.yml
を設定する
default: &default adapter: mysql2 pool: 5 timeout: 5000 encoding: utf8mb4 collation: utf8mb4_general_ci socket: /var/lib/mysql/mysql.sock
今回、重要なのはencoding
とcollation
です。それぞれの大まかな意味としては、以下のとおりです。
MySQL自体の文字コード設定を確認する
show variables like 'char%';
で現在の全体的なMySQLの文字コード関連の設定を参照できます。
MariaDB [(none)]> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
utf8mb4
には対応できていないので、設定する必要があります。
文字コードをutf8mb4
に変更する
/etc/my.cnf.d/server.cnf
にあたる設定ファイルを編集します。
$ sudo vi /etc/my.cnf.d/server.cnf
[server] character-set-server = utf8mb4 [mysqld] character-set-server = utf8mb4 plugin-load = handlersocket.so [client] default-character-set = utf8mb4
再起動して、文字コードが反映されたか確認してみます。
$ sudo service mysql stop Shutting down MySQL... SUCCESS! $ sudo service mysql start Starting MySQL.170531 23:11:49 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'. 170531 23:11:49 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql SUCCESS! $ mysql -uroot -p MariaDB [(none)]> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
うまく設定が反映されているのがわかります。character_set_system
がutf8
のままですが、こちらの変数はシステムの使用する文字セットで常にutf8が使用される設定のため問題ありません。
試しにマイグレーションしてみる
今回は新たにマイグレーションしてみることで、utf8mb4
に対応できているかを確認してみます。マイグレーション生成は省略します。
$ rake db:migrate rake aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `index_piyo` ON `piyo_tables` (`hoge`, `piyo`) Tasks: TOP => db:migrate (See full trace by running task with --trace)
Mysql2::Error: Specified key was too long; max key length is 767 bytes
といったエラーが出ます。
Mysql2::Error: Specified key was too long; max key length is 767 bytesを解決する
このエラー自体は以下の説明が分かりやすいです。
デフォルトでは最大インデックス長は767バイトですので、UTF8では255文字まで、UTF8MB4では191文字までしかインデックスを張れません。 しかし、こちらはMySQL 5.5.14以降からINNODB_LARGE_PREFIXオプションで最大3072バイトまで拡張できるので、そんなに大きな問題ではないです。
これに対応するために、MySQLの設定ファイルにINNODB_LARGE_PREFIXオプションを追加し、インデックスのキープレフィックスを拡張します。
$ sudo vi /etc/my.cnf # 以下を追加 [mysqld] innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix
主に3つの指定をしています。
innodb_large_prefix
を有効にする- 上記設定を有効にするために
innodb_file_format
をBarracuda
にするinnodb_file_per_table
を有効にする
- 上記設定を有効にするために
設定後、MySQLを再起動します。
$ sudo service mysql stop Shutting down MySQL.. SUCCESS! $ sudo service mysql start Starting MySQL.170531 23:24:12 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'. 170531 23:24:12 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql SUCCESS!
これでおそらく、インデックスのキープレフィックスが拡張できました。
テーブル作成時にオプションを追加するようにパッチを当てる
kamipoさんのモンキーパッチを使い、テーブル作成時のオプションを指定します。
config/initializers/ar_innodb_row_format.rb
ActiveSupport.on_load :active_record do module ActiveRecord::ConnectionAdapters class AbstractMysqlAdapter def create_table_with_innodb_row_format(table_name, options = {}) table_options = options.merge(:options => 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC') create_table_without_innodb_row_format(table_name, table_options) do |td| yield td if block_given? end end alias_method_chain :create_table, :innodb_row_format end end end
再度、マイグレーションしてみる
$ rake db:migrate:reset Dropped database 'piyo_development' Dropped database 'piyo_test' Created database 'piyo_development' Created database 'piyo_test' == 20170531130735 CreatePiyos: migrating ========================= -- create_table(:piyos) -> 0.0109s == 20170531130735 CreatePiyors: migrated (0.0191s) ================
完了できました。
db/schema.rb
にダンプされたテーブルを見てみる
ActiveRecord::Schema.define(version: 20170531130735) do create_table "piyos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC" do |t| 省略 end end
うまく設定ができています。
以上でutf8mb4
対応は完了です。
参考
CentOS6.8 - MySQL5.1 から MySQL5.6へバージョンアップする
環境
- CentOS release 6.8 (Final) 64bit
今回はRails5.0のアプリ開発の際に、絵文字(utf8mb4)に対応するためにMySQL5.1からMySQL5.6へのバージョンアップの必要がありました。
既存MySQL5.1を削除する
# rpm -qa|grep mysql mysql-libs-5.1.73-8.el6_8.x86_64 mysql-server-5.1.73-8.el6_8.x86_64 mysql-5.1.73-8.el6_8.x86_64 mysql-devel-5.1.73-8.el6_8.x86_64
これらを削除する(今回は開発環境のためバックアップは取っていませんが、必要に応じて削除前に行うようにしてください)
# yum erase mysql-libs-5.1.73-8.el6_8.x86_64 mysql-server-5.1.73-8.el6_8.x86_64 mysql-5.1.73-8.el6_8.x86_64 ysql-devel-5.1.73-8.el6_8.x86_64 ... Removed: mysql.x86_64 0:5.1.73-8.el6_8 mysql-libs.x86_64 0:5.1.73-8.el6_8 mysql-server.x86_64 0:5.1.73-8.el6_8 Dependency Removed: MySQL-python.x86_64 0:1.2.3-0.3.c1.1.el6 cronie.x86_64 0:1.4.4-15.el6_7.1 cronie-anacron.x86_64 0:1.4.4-15.el6_7.1 crontabs.noarch 0:1.10-33.el6 mysql-devel.x86_64 0:5.1.73-8.el6_8 perl-DBD-MySQL.x86_64 0:4.013-3.el6 postfix.x86_64 2:2.6.6-6.el6_7.1 Complete!
ログを見てみるとDependency Removed
(依存関係にあったものも削除)されたことがわかりますが、必要に応じて再インストール後に導入してあげてください。
MySQL5.6を導入する
MySQL :: Download MySQL Yum Repository
# yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
正常にリポジトリが導入できたら、さっそくインストールします。
# yum -y install mysql-community-server # mysqld --version mysqld Ver 5.6.36 for Linux on x86_64 (MySQL Community Server (GPL))
導入できました。自動起動設定をして、起動してみます。
# chkconfig mysqld on # service mysqld start Starting mysqld: [ OK ]
MySQLに入ってみます。
# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.36 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit Bye
いけました!
余談
Column count of mysql.user is wrong. Expected 43, found 39.
対話形式で初期設定できるmysql_secure_installation
を実行するとエラーが起きました。
# mysql_secure_installation ... Set root password? [Y/n] Y New password: Re-enter new password: ERROR 1558 (HY000) at line 1: Column count of mysql.user is wrong. Expected 43, found 39. Created with MySQL 50173, now running 50636. Please use mysql_upgrade to fix this error. root password update failed! Cleaning up...
これに対しては、MySQLのバージョンアップの際に既存テーブルの互換性をチェックして、必要に応じて「いい感じにやってくれる」らしいmysql_upgrade
を実行したら、解決しました。
# mysql_upgrade -p Enter password: Looking for 'mysql' as: mysql Looking for 'mysqlcheck' as: mysqlcheck Error: Failed while fetching Server version! Could be due to unauthorized access. FATAL ERROR: Upgrade failed [root@localhost ~]# mysql_upgrade -p ... OK # mysql_secure_installation ... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL! Cleaning up... #
Railsでのバージョンアップに関わっての対応
そのままではマイグレーションが通りませんでした。
# rake db:migrate rake aborted! LoadError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory - /usr/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/mysql2-0.4.5/mysql2/mysql2.so /vagrant/paters_rails/config/application.rb:7:in `<top (required)>' /vagrant/paters_rails/rakefile:4:in `require_relative' /vagrant/paters_rails/rakefile:4:in `<top (required)>' (See full trace by running task with --trace)
これは、gemのmysql2
を再インストールすることで、いい感じに設定し直してくれます…が、その前に必要なモジュールであるmysql-devel
がインストールされてないエラーが出ました。
# gem uninstall mysql2 Successfully uninstalled mysql2-0.4.5 [root@localhost paters_rails]# gem install mysql2 Fetching: mysql2-0.4.5.gem (100%) Building native extensions. This could take a while... ERROR: Error installing mysql2: ERROR: Failed to build gem native extension. /usr/local/rbenv/versions/2.2.3/bin/ruby -r ./siteconf20170417-21958-1ruy28h.rb extconf.rb checking for rb_absint_size()... yes checking for rb_absint_singlebit_p()... yes checking for ruby/thread.h... yes checking for rb_thread_call_without_gvl() in ruby/thread.h... yes checking for rb_thread_blocking_region()... no checking for rb_wait_for_single_fd()... yes checking for rb_hash_dup()... yes checking for rb_intern3()... yes checking for rb_big_cmp()... yes checking for mysql_query() in -lmysqlclient... no ----- mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again. ----- *** extconf.rb failed *** extconf failed, exit code 1 Gem files will remain installed in /usr/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/mysql2-0.4.5 for inspection. Results logged to /usr/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/mysql2-0.4.5/gem_make.out
# yum install mysql-devel ... Installed: mysql-community-devel.x86_64 0:5.6.36-2.el6 Complete!
再度、gemをmysql2
をインストール。
# gem install mysql2 Done installing documentation for mysql2 after 1 seconds 1 gem installed
いけました。以上です。
参考
RSpec - テストでは画像アップローダを無効にする
Cloudinary::CarrierWave::UploadError
現在開発しているRailsアプリでは、Userのプロフィール画像をCarrierWaveを用いて、Cloudinaryに画像をアップロードする方法で実装しています。 このUserモデルに関わるテストを行うときはFactoryGirlを用いてテストデータを用意しています。
FactoryGirl.define do factory :user do sequence(:email) { |i| "#{i}_#{Time.current.to_i}_#{Faker::Internet.email}" } name Faker::Name.name profile Faker::Lorem.sentence password "userpassword" user_image { fixture_file_upload Rails.root.join('spec/fixtures/files/sample_500x500.png'), 'image/png' } end end
この状態で、テストを実行すると、以下の結果になります。(一部抜粋)
Failures: 1) Articles GET /api/v1/articles 記事一覧を取得する パラメータを指定しない Failure/Error: let!(:articles) { create_list(:article, 3) } Cloudinary::CarrierWave::UploadError: cloud_name is disabled # ./spec/requests/articles_spec.rb:6:in `block (4 levels) in <top (required)>' Finished in 3.73 seconds (files took 11.97 seconds to load)
今回、テストで画像に対して複雑なテストをするわけでもないため、Cloudinaryの画像をアップロードするロジックは噛ませる必要がありません。 そのため以下の解決方法をとりました。
config.enable_processing = false if Rails.env.test?
config/initializers/carrier_wave.rb
を作成し、以下を記述します。
CarrierWave.configure do |config| config.enable_processing = false if Rails.env.test? end
こうすることで、テスト環境に限りアップロード処理をスキップすることができ、テストも無事、通るようになります。
. Finished in 2.7 seconds (files took 7.97 seconds to load) 1 examples, 0 failures
以上です。
参考
Wercker - 「Choose a repository」で目的のリポジトリが見つからない
Werckerで「Choose a repository」フォームで所属しているOrganizationのPrivate Repositoryが見つからない
WerckerでCI環境を構築しようと試みたところ、Create Applicationフォームでつまづきました。 最初の画像の通り、はじめに「Choose a repository」というフォームがあるのですが、ここで自分が所属するOrganizationのプライベートリポジトリが表示されず、選択できませんでした。
解決方法:WerckerをGitHub上でConfigureして,該当リポジトリをGrant accessする
ルー語っぽくなって非常にわかりづらいですが、順を追って説明します。
1. 以下のページにアクセスし,Configureリンクをクリック
Install Wercker · Integrations Directory · GitHub
2. Organization accessの中からWerckerからのアクセスを許可したいOrganizationをGrant accessする
上の画像のように,自分がそのOrganizationの権限を得ている場合はWerckerからのアクセス要求を「Grant access」することが可能です。 できない場合は、管理者アカウントから設定する必要があります。
3. 再度,WerckerのCreate Applicationフォームでリポジトリを検索すると,無事先ほど「Grant access」したリポジトリが選択可能になっています。
先ほど,yurueというOrganizationのWerckerへのアクセス許可を行いました。すると画像の通り、Werckerからyurueのリポジトリにアクセスが可能となり,検索に引っかかってくるようになりました。
以上です。
参考
MySQL5.5系がservice mysqld startで起動しない
症状
こちらの記事を参考に、無事MySQL5.5系をインストールすることが出来ました。
しかし、いざ起動させようとすると、FAILDとなります。
[root@localhost mysql]# service mysqld start MySQL Daemon failed to start. Starting mysqld: [FAILED]
エラーログを見てみます。
[root@localhost mysql]# cat /var/log/mysqld.log 170302 4:23:25 [Note] Plugin 'FEDERATED' is disabled. 170302 4:23:25 InnoDB: The InnoDB memory heap is disabled 170302 4:23:25 InnoDB: Mutexes and rw_locks use GCC atomic builtins 170302 4:23:25 InnoDB: Compressed tables use zlib 1.2.3 170302 4:23:25 InnoDB: Using Linux native AIO 170302 4:23:25 InnoDB: Initializing buffer pool, size = 128.0M 170302 4:23:25 InnoDB: Completed initialization of buffer pool InnoDB: Error: checksum mismatch in data file ./ibdata1 170302 4:23:25 InnoDB: Could not open or create data files. 170302 4:23:25 InnoDB: If you tried to add new data files, and it failed here, 170302 4:23:25 InnoDB: you should now edit innodb_data_file_path in my.cnf back 170302 4:23:25 InnoDB: to what it was, and remove the new ibdata files InnoDB created 170302 4:23:25 InnoDB: in this failed attempt. InnoDB only wrote those files full of 170302 4:23:25 InnoDB: zeros, but did not yet use them in any way. But be careful: do not 170302 4:23:25 InnoDB: remove old data files which contain your precious data! 170302 4:23:25 [ERROR] Plugin 'InnoDB' init function returned error. 170302 4:23:25 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 170302 4:23:25 [ERROR] Unknown/unsupported storage engine: InnoDB 170302 4:23:25 [ERROR] Aborting 170302 4:23:25 [Note] /usr/sbin/mysqld: Shutdown complete
解決手順
いろいろ、記事を探してみると、バージョンアップ前から作成されている元々あったMySQLデータを一度別の場所に退避して、起動してみると良いらしい。
MySQLのデータのパスは設定ファイルの/etc/my.cnf
に記載されています。
[root@localhost mysql]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql
この場合だと/var/lib/mysql
です。恐らくデフォルトで、/var/lib/mysql
だと思います。
このディレクトリに何が置いてあるか、というと。
[root@localhost /]# cd /var/lib/mysql/ [root@localhost mysql]# ls auto.cnf ibdata1 ib_logfile1_tes hoge_development test ib_buffer_pool ib_logfile0_tes mysql hoge_test
なんか色々入ってます。このMySQLはRailsで使用しているので、hoge_development
、hoge_test
などの既存DBが置いてあるがわかります。
このすべてをどこかにバックアップ(退避)しつつ、
[root@localhost mysql]# ls
空の状態を確認して、再度MySQLを起動してみましょう。
[root@localhost mysql]# service mysqld start Initializing MySQL database: 170302 4:25:09 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 170302 4:25:09 [Note] /usr/sbin/mysqld (mysqld 5.5.54) starting as process 15584 ... 170302 4:25:09 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 170302 4:25:09 [Note] /usr/sbin/mysqld (mysqld 5.5.54) starting as process 15591 ... PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. Please report any problems at http://bugs.mysql.com/ [ OK ] Starting mysqld: [ OK ]
起動できたっぽいです。 入れるかな。。。
[root@localhost mysql]# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.54 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
入れました! あとはdumpしたデータベースを復元して、完了です。
参考
React - カスタムコンポーネントの基本
カスタムコンポーネントを作ってレンダーする
前回、HTML要素からコンポーネントを作成し、レンダーする方法を学んだ。
一方でReactではHTML要素をコンポーネントにするよりも、カスタムコンポーネントを作る場合のほうが多い。 カスタムとは具体的に、「独自のスタイル要素を指定してH1要素にデザインをあてる」といった意味ではなく、 部品となるカスタムコンポーネントをクラスとして定義して、HTMLドキュメントに要素を差し込む、という意味です。
手順
といった手順を踏んで、カスタムコンポーネントを定義し、レンダーします。
書いてみる
ディレクトリ構造はこのようになっています。
. └── hello_react ├── sample.html └── src └── react_script.js
sample.html
HTMLはいつもどおりです。bodyにid=content
のdiv要素を置いておきます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Hello React</title> <script src="https://unpkg.com/react@15/dist/react.js"></script> <script src="https://unpkg.com/react-dom@15/dist/react-dom.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> <script type="text/babel" src="src/react_script.js"></script> </head> <body> <div id="content"> </div> </body> </html>
このid=content
のdiv要素の中身にカスタムコンポーネントとして、以下のコンポーネントを差し込みます。
<div class="hello-world-box"> <h1>Hello World!!</h1> </div>
src/script.js
var HelloWorldBox = React.createClass({ render: function () { return ( <div className="helloWorldBox"> <h1>Hello World!!</h1> </div> ); } });
順を追って、読んでみます。
はじめに、1行目でReact.createClass
メソッドで定義するカスタムコンポーネントをHelloWorldBox
変数に代入します。
カスタムコンポーネントの命名規則として、代入する変数名はキャメルケースとなっています。
そして、クラスの中身としてrenderメソッドを定義しています。 ここでは、レンダーしたいHTML要素を返すようにしています。
ここで注意ですが、クラス名についてHTML的な表記ではなくてclassName="helloWorldBox"
というような表記へと変える必要があります。
ReactDOM.render( <HelloWorldBox />, document.getElementById('content') );
次に、このカスタムコンポーネントを基にして要素を作成し、HTMLドキュメントに差し込む位置を指定して、レンダーする部分を書いています。 こちらは、通常のコンポーネントと同じです。
全体としてはこのようなかたちになります。
var HelloWorldBox = React.createClass({ render: function () { return ( <div class="helloWorldBox"> <h1>Hello World!!</h1> </div> ); } }); ReactDOM.render( <HelloWorldBox />, document.getElementById('content') );
ちなみにですが、<HelloWorldBox />
の部分は
React.createElement(HelloWorldBox)
という風にも書けます。
動作を確認してみます。
うまく、差し込まれていることがわかります。
以上です。
参考
WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用
- 作者: 柴田文彦
- 出版社/メーカー: インプレス
- 発売日: 2016/11/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
入門 React ―コンポーネントベースのWebフロントエンド開発
- 作者: Frankie Bagnardi,Jonathan Beebe,Richard Feldman,Tom Hallett,Simon HØjberg,Karl Mikkelsen,宮崎空
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/04/03
- メディア: 大型本
- この商品を含むブログ (2件) を見る