著者アーカイブ 村上

村上 著者:村上

【CSS】要素に指定した position: fixed が効かない時の対処法

そこまで長時間悩んだわけではないのですが、ちょっぴりハマったのでご紹介。

とある要素に、下記のようにCSSを指定していたのですが、スクロールした際に、親要素の下部にくっついて動くような挙動になってしまいました。

position: fixed;
bottom: 0;
left: 0;

本来は画面の下部にくっついて動かないでいてほしかったのですが、気が付けばページ自体に追従する形になっており、そこそこ慌てました。
が、親要素を確認しても、特に変な記述は見つからず…。

 

で、色々調べてみたところ、bodyに指定した下記のCSSが原因でした。

transform: translateZ(0);

親要素ばかりみていたので、これは盲点でした。

どうやら、子要素に position: fixed を指定した時、親要素に transform が指定されていると、position: fixed が希望した通りの挙動をしてくれなくなるみたいでした。

対処法としては、body に指定した transform を削除するか、下記のように !important を用いて無理矢理上書きするかですね。

// transform: translateZ(0);
// transform を解除

transform: none !important;
// !important を使って none で強制的に上書き

力業感が否めませんが…正常に動くようになったので、今回はこれで問題なしということにしておきます。

position を指定した要素の挙動がおかしくなった場合は、親要素もしくは body に transform が指定されていないか確認してみてください。

村上 著者:村上

【未解決】Xcode 9.1 で ‘Cordova/CDVViewController.h’ file not found というエラーが発生

Cordova で開発中のアプリをビルドしようとしたところ、下記のようなエラーが発生しました。

MainViewController.h:28:9: ‘Cordova/CDVViewController.h’ file not found

エラー内容は書いてある通りで、MainViewController.h というファイルで、Cordova/CDVViewController.h が見つからないというものでした。
MainViewController.h を確認してみると、確かに #import <Cordova/CDVViewController.h> の行でエラーとなっていました。

 

解決方法を調べたところ、下記の画像のように、Build SettingsHeader Search Path の値に下記のような記述があるので、

"$(OBJROOT)/UninstalledProducts/include"

こちらを、

"$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"

上記に変更すれば、実行できますとの書き込みを見つけたので、早速試してみました。

が、今回のエラーはこちらでは解決できませんでした…!
以前も全く同じエラーに遭遇したことがあり、その時はこのやり方で解決できたのですが、今回は何故かダメでした。
他にも、iOSのプラットフォームを一度削除した後、再度追加するとビルドできるとの記載もあったのですが、こちらも効果なし…。
それ以外の解決方法も検索してはいるのですが、ほぼ Build Settings > Header Search Path の値を修正するという解決策しかヒットしないので、正直手詰まりです。

もし、上記以外の解決策をご存知の方は、是非ともご教授くださいませ。
どうぞよろしくお願い致します。

村上 著者:村上

【解決済】FuelPHPでストアドプロシージャを実行する方法

以前に投稿した、FuelPHPでストアドプロシージャを実行する方法について、解決したので改めて記事にまとめてみます。
詳しくは、先日の記事をご覧ください。

【未解決】FuelPHPでストアドプロシージャを実行してデータを取得したい
https://cpoint-lab.co.jp/【未解決】fuelphpでストアドプロシージャを実行して/

今回実行するストアドプロシージャはこちら。
年と月を指定して、この期間に該当するデータを取得します。

1> EXEC dbo.user_month_report @year =2017, @month =12;
2> go

こちらは、直接ターミナルで実行すると、データが取得できるので、プロシージャには問題なし。

そして、前回のコードは下記の通り。

// 修正前
$result = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;");
$result->execute();

こちらを実行すると、結果で bool(true) が返ってきてしまい、理由がわからず頭を抱えていましたが、実行の方法が間違っていました。

修正後の正しいコードはこちら。

// 修正後
$tmp = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;", DB::SELECT);
$result = $tmp->execute()->as_array();

修正前のコードでは、execute() で実行したものをそのまま出力しようとしていたのですが、そうではなく、一旦変数に代入してから出力したところ、無事にデータが取得できているのを確認できました。
また、DB::query()の第二引数の$typeに SQL クエリタイプとして「DB::SELECT」を指定して、データを取得するプロシージャであることを明記しました。
これも必須の指定のようでした。

更に、取得できたデータに対して as_array() を使うと、データを配列に格納できて、扱いやすくなります。
execute() と as_array() はセットで覚えるのがおすすめですね。

以上、FuelPHPでストアドプロシージャを実行する方法でした。
ちょっとしたミスでしたが、私はこういう些細なミス程ハマりやすいので、今後もこまめに備忘録として投稿していきたいと思います。

村上 著者:村上

【PHP】PHPExcelを使うときにセルの書式設定を変更する方法

今回はPHPでのエクセルファイルの作成についてです。
ライブラリは、PHPExcelを使用しています。

 

まずは事前準備から。
ライブラリ導入は、Githubからダウンロードしてきて、requre_once で読み込むだけでOKです。
URLはこちらから。

PHPOffice/PHPExcel
https://github.com/PHPOffice/PHPExcel.git

//ライブラリ読み込み
require_once APPPATH.'../packages/excel/Classes/PHPExcel.php';
require_once APPPATH.'../packages/excel/Classes/PHPExcel/IOFactory.php';

パスは任意の場所に修正してください。

そしてエクセルファイルの作成から、編集するシートの設定までは下記の通り。

// PHPExcelオブジェクトを生成する
$book = new PHPExcel();
// テンプレート読み込み
$phpexcel = \PHPExcel_IOFactory::load('./tmp/template.xlsx');
$phpexcel->setActiveSheetIndex(0);
// カレントシート選択
$sheet = $phpexcel->getActiveSheet();
// シート名変更
$sheet->setTitle('データ');

今回はテンプレートを読み込んでいますが、もちろん新規のファイルを作成して、それを編集することも可能です。

セルに文字列や数値を入れる時は setCellValue()setCellValueExplicit() メソッドを使います。

// 数値
$sheet->setCellValue('A2', 0123);
// 文字列
$sheet->setCellValueExplicit('A1', "あいうえお", \PHPExcel_Cell_DataType::TYPE_STRING);

このあたりは分かりやすいですね。

 

本題はここから。
セルの書式設定を変える方法は下記のとおりです。

// 数値表示(小数点第2位まで)
$sheet->setCellValue('B1', 12.345);
$sheet->getStyle('B1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
// 12.35

// 数値表示(小数点第2位まで & 3桁でカンマ区切り)
$sheet->setCellValue('B2', 8765.4321);
$sheet->getStyle('B2')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
// 8,765.43

// パーセント表示(小数点第2位まで)
$sheet->setCellValue('B3', 0.56789);
$sheet->getStyle('B3')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
// 56.79%

上記のように表示形式の定数が設定されており、それを指定して使用することができます。
他にもありましたが、使用頻度が高そうなのはこのあたりかな。

なお、下記のように自分で指定することもできます。

// 数値表示(3桁でカンマ区切り)
$sheet->setCellValue('C1', 12345);
$sheet->getStyle('C1')->getNumberFormat()->setFormatCode('#,##0');
// 12,345

指定方法は、エクセルのセルの書式設定の時と同じですね。

 

こちらの方法を使えば、小数値をパーセントに直すときに、100をかけて、% を後ろにつけて…なんて作業をやらずに済みますね。
というか、最初表示形式の指定方法を知らなくて、上のように文字列でパーセント表示をさせようとしてしまいました。
当たり前ですが、こちらの方が遥かに楽です。

また、エクセルを開いたときに時折見かける、「数値が文字列として保存されています」という警告も防げます。
個人的には、これが一番嬉しいですね。

ということで、PHPExcelの知っているとちょっと便利なメソッドでした。

村上 著者:村上

【PHP】DateTimeで現在日時から○日後の日付を取得する方法

後輩に聞かれたので、私と彼のための覚え書きのメモとして。

PHPには、日付と時刻を扱う DateTimeクラスがありますが、こちらを用いて、現在の日時から○日後や、○時間前の日付・時刻を取得する方法です。

DateTimeクラスについて、PHPのマニュアルはこちらから。

DateTime クラス – Manual
http://php.net/manual/ja/class.datetime.php

 

○日後を扱う前に、まず現在の日時を取得する方法は下記の通り。

// 現在の日時を取得
$now = new DateTime();
echo $now->format('Y-m-d H:i:s'); // 2017-12-05 19:05:00

DateTimeの引数を空で指定すると、現在の日時を取得できます。
それを任意のフォーマットに変換しています。

また日付文字列を引数に指定する事も出来ます。

// 日付文字列で指定した日時を取得
$date = new DateTime("2017-06-01 06:00:00");
echo $date->format('Y-m-d H:i:s'); // 2017-06-01 06:00:00

日付文字列で指定した日時を取得できます。

 

で、本題はここから。
○日後という相対的な日時を取得したい場合、modify というものを使うことにより、DateTimeで取得した日付を変更できます。

// 現在の日時の1日後の日時を取得
$date = new DateTime();
$date->modify('+1 day');
echo $date->format('Y-m-d H:i:s');  // 現在の日時の1日後の日付

または、この書き方でもOK。

// 日付文字列で指定した日時の1日後の日時を取得
$date = new DateTime("2017-06-01 06:00:00 + 1 day");
echo $date->format('Y-m-d H:i:s'); // 2017-07-01 06:00:00

上記はGoogle Chromeでしか動作検証していませんが、1日後の日付が正しく取得できました。

それ以外にも、「– 1 day」と書けば1日前、「+ 3 hour」と書けば3時間後、「+ 1 week」と書けば1週間後の日時がそれぞれ取得できます。
日付の変更は、使用頻度はそこまで高くはないのですが、ふとした拍子に使ったりするので、頭の片隅ででも覚えて置きたいですね。

 

また、今回 DateTimeクラスを調べていて知ったのですが、数値を指定して日時を取得することもできるとのこと。
このやり方については私はまだ実際に使ったことありません。

// 数値を指定して日時を取得
$date = new DateTime();
$date->setDate(2017,6,1);
$date->setTime(6,0,0);
echo $date->format('Y-m-d H:i:s'); // 2017-06-01 06:00:00

セレクトボックスから年・月・日をそれぞれ選んで、それらを日付に変換するときとかに使えそうですね。
が、今回はDatepickerを使っているので、使うことはなさそうです。

村上 著者:村上

【未解決】FuelPHPでストアドプロシージャを実行してデータを取得したい

タイトルにある通り、今回の記事はまだ未実装、というか実現できていないことについて。
ということで、もし解決策をご存知の方がいらっしゃれば、何卒ご教授くださいますようお願い致します。

 

ストアドプロシージャについては、こちらの記事がわかりやすいかと。

ストアドプロシージャの基本的ななにか – Qiita
https://qiita.com/setsuna82001/items/e742338eb93e3a48ba46

こちらの記事によると、ストアドプロシージャとは「データベース上での一連の処理に、名前をつけて関数のように呼び出して使用できるもの」とのこと。
データベース上で動作が完結するので、開発言語に依存しません。

 

FuelPHPについて、公式サイトはこちらから。

FuelPHPドキュメント
http://fuelphp.jp/docs/1.7/

FuelPHPは、PHP5.3以上を対象に開発されたWebフレームワークです。
他のフレームワークに比べて規約が少なく、また高速で軽量なため、使いやすいのが特徴です。

こちらのサイトもご参考に。

高速で軽量なフレームワークFuelPHPを使う
http://www.buildinsider.net/web/bookphplib100/096

 

そして、今回実現したいのは、この両方を利用して、データベースからデータを取得する方法についてです。
実行するストアドプロシージャはこんな感じ。

1> EXEC dbo.user_month_report @year =2017, @month =12;
2> go

※実際に動作させているものとは異なります。

こちらをターミナルで実行すると、望んだとおりの結果が得られます。
したがって、ストアドプロシージャ自体には問題はなさそう。

が、こちらを下記のように FuelPHP で実行すると、結果が何故か bool(true) が返ってきます。

$result = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;");
$result->execute();

ストアドプロシージャに問題がないようなので、十中八九 FuelPHP が原因というのは分かるのですが、その解決策がどうしてもわかりません。
FuelPHPのドキュメントにも、ストアドプロシージャの実行方法についての記述がないため、そもそも対応していないのでしょうか。

ちなみに、FuelPHPのフォーラムに、「DB Class with mysql – select from stored procedure」という、今回の状況に似たような投稿があったのは見つけました。
その中で、DB::query()の第二引数の$typeに SQL クエリタイプとして「DB::SELECT」を指定するといいとの記述があったので試してみましたが、残念ながら結果は変わりませんでした。

参考にしたフォーラムの投稿はこちら。

DB Class with mysql – select from stored procedure
https://fuelphp.com/forums/discussion/4299

 
新しいライブラリやフレームワークを使うのは、やはり難しいですね。

村上 著者:村上

【CSS】DIV要素を上下左右で中央揃えする方法(IE、Safari対応)

使用頻度は高めだけど、良く忘れるので備忘録として。
今回は今回は子要素を上下左右で中央揃えにするやり方について。
なお、同じ方法で画像の中央揃えも実現できます。

HTML、CSSのコードはこんな感じ。

<!-- HTML -->
<div id="parent">  <!-- 親要素 -->
    <div id="child"></div>  <!-- 子要素 -->
</div>
/* CSS */
#parent {
    background-color: blue;
    height: 200px;
    width: 200px;
    position: relative;
}
#child {
    background-color: green;
    height: 100px;
    width: 100px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
}

このとき重要となってくるのが、親要素に指定された position: relative; と、子要素に指定された position: absolute; です。
これがあることで、子要素が表示される際の基準位置が親要素の左上となります。

そして、子要素の top、left をそれぞれ50%とすることで、子要素の左上の位置を親要素の中央に来るようにしています。
が、これでは左下に移動しすぎなので、transform: translate(-50%, -50%); で子要素の縦横それぞれの50%分だけ左上に移動させて、ちょうど親要素の上下中央に子要素が来るように調節しています。

 

やっていることは以上です。
他にも上下中央揃えする方法はあるようですが、今回の書き方を使ったところ、IESafariなど、表示が崩れやすいブラウザで表示した時に崩れなかったので、個人的にはおすすめの書き方です。
IEやSafariでデザイン崩れに悩まされている場合は、こちらの書き方をお試しになってみてはいかがでしょうか。

村上 著者:村上

【PHP】指定した値の範囲でランダムな少数の値を生成する方法

ランダムな整数の生成なら、rand() 関数が用意されていますが、今回は少数値が必要だったので、生成方法をご紹介。
PHPのマニュアルに掲載されていたものですから、少し調べればわかるやり方ではありますが、今後も使うことがあるだろうという事で、備忘録も兼ねています。

 

まずはランダムな整数の生成から。
こちらは簡単で、rand() 関数を使用するだけ。

// rand() 関数
int rand ( int $min , int $max );

// 実行例
$random = rand(1, 10);

引数は省略可ですが、指定した場合は、この範囲内で収まる値で乱数を返してくれます。
上記の実行例だと、1から10の範囲内の乱数が生成されます。

PHPマニュアルはこちらからご確認ください。
http://php.net/manual/ja/function.rand.php

 

お次はランダムな少数値の生成方法。
この場合は、mt_getrandmax()という、mt_rand() 関数が呼ばれた際に返される最大の値を返す関数を利用しています。

なお、mt_rand() はランダムな整数を生成する関数です。
乱数を返す機能としては rand() 関数との違いはなさそうですが、PHPマニュアルによると、rand()よりも4倍以上高速に乱数を生成してくれるのだとか。

ランダムな少数を返す関数は下記の通り。

// ランダムな少数値を返す
function randomFloat($min = 0, $max = 1) {
    return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}

// 実行例
$random = randomFloat(0, 100);

こちらを実行すると、0から100の範囲でランダムな少数値を返してくれます。
ちなみに、こちらの関数も引数は省略可です。

 

と、いう事で、ランダムな少数値の生成方法でした。
なお、0から1の間で乱数を返す関数でしたら、lcg_value() という関数もあるそうでしたが、こちらは乱数の精度があまりよくないとのこと。
また、値の範囲が0から1というのも、少し汎用性が悪い場合がありそうですから、小数値の乱数生成なら上記の関数がおすすめです。

村上 著者:村上

Internet ExplorerでSVGのサイズが調節できない時の対処法

とりあえず、IEへの不満感がさらに募った一件でした。

タイトル通り、IEで画像が指定したサイズで正しく表示されないという現象が起きたので、その時の対処法についてまとめ。

 

SVGファイルを表示させようと、下記のようにimgタグを記述したのですが、IEで正しく表示されませんでした。

<img src="SVGファイルのパス" style="width: 25px; height:25px;" />

こちらの解決策としては、SVGファイルをそのものを編集してしまう方法が一番手っ取り早かったです。

今回参考にしたサイトはこちら。

IEやEdgeでSVGのサイズが変わってしまう問題の解決法!
https://www.cb21.co.jp/blog/tips/tips-svg-ie-edge.html

 

SVGファイルの編集は、まずSVGファイルを適当なテキストエディタで開きます。
そうすると、下記のようなデータとして表示されます。

<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
<style type="text/css">
	.st0{fill:#4B4B4B;}
</style>
<g>
	<path class="st0" d="M378.409,0H208.294h-13.176l-9.314,9.315L57.017,138.101l-9.314,9.315v13.176v265.513
		c0,47.36,38.528,85.896,85.895,85.896h244.811c47.361,0,85.888-38.535,85.888-85.896V85.896C464.297,38.528,425.77,0,378.409,0z
		 M432.493,426.104c0,29.877-24.214,54.091-54.084,54.091H133.598c-29.877,0-54.091-24.214-54.091-54.091V160.592h83.717
		c24.884,0,45.07-20.179,45.07-45.071V31.804h170.114c29.87,0,54.084,24.214,54.084,54.091V426.104z" style="fill: rgb(75, 75, 75);"></path>
	<path class="st0" d="M180.296,296.668l-4.846-0.67c-10.63-1.487-14.265-4.978-14.265-10.104c0-5.78,4.309-9.817,12.383-9.817
		c5.653,0,11.305,1.62,15.745,3.764c1.886,0.942,3.903,1.487,5.789,1.487c4.845,0,8.612-3.63,8.612-8.616
		c0-3.226-1.481-5.921-4.71-7.939c-5.384-3.372-15.476-6.06-25.572-6.06c-19.781,0-32.436,11.171-32.436,27.998
		c0,16.15,10.232,24.898,28.938,27.454l4.846,0.67c10.903,1.48,14.129,4.846,14.129,10.229c0,6.326-5.247,10.766-14.939,10.766
		c-6.727,0-12.111-1.745-19.645-5.921c-1.616-0.942-3.634-1.62-5.788-1.62c-5.115,0-8.885,3.91-8.885,8.756
		c0,3.226,1.616,6.326,4.713,8.344c6.054,3.764,15.878,7.8,28.798,7.8c23.823,0,35.934-12.24,35.934-28.795
		C209.097,307.84,199.273,299.356,180.296,296.668z" style="fill: rgb(75, 75, 75);"></path>
	<path class="st0" d="M281.108,259.382c-4.577,0-7.939,2.43-9.556,7.674l-16.69,54.51h-0.402l-17.634-54.51
		c-1.745-5.244-4.978-7.674-9.551-7.674c-5.653,0-9.692,4.176-9.692,9.287c0,1.347,0.269,2.834,0.67,4.175l23.286,68.104
		c2.96,8.477,6.727,11.57,12.652,11.57c5.785,0,9.555-3.093,12.516-11.57l23.282-68.104c0.406-1.341,0.674-2.828,0.674-4.175
		C290.664,263.558,286.76,259.382,281.108,259.382z" style="fill: rgb(75, 75, 75);"></path>
	<path class="st0" d="M364.556,300.836h-18.841c-5.114,0-8.344,3.1-8.344,7.806c0,4.713,3.23,7.814,8.344,7.814h6.193
		c0.538,0,0.803,0.258,0.803,0.803c0,3.505-0.265,6.598-1.075,9.014c-1.882,5.796-7.67,9.426-14.669,9.426
		c-7.943,0-12.921-3.903-14.939-10.096c-1.075-3.365-1.48-7.8-1.48-19.648c0-11.842,0.405-16.15,1.48-19.516
		c2.018-6.325,6.867-10.228,14.67-10.228c5.924,0,10.362,1.885,13.859,6.724c2.695,3.777,5.387,4.852,8.749,4.852
		c4.981,0,9.021-3.638,9.021-8.888c0-2.151-0.674-4.035-1.752-5.921c-4.842-8.204-15.071-14.264-29.877-14.264
		c-16.287,0-28.935,7.408-33.644,22.204c-2.022,6.466-2.559,11.576-2.559,25.038c0,13.454,0.538,18.573,2.559,25.031
		c4.709,14.802,17.357,22.204,33.644,22.204c16.286,0,28.668-8.204,33.374-22.881c1.617-5.111,2.29-12.645,2.29-20.716v-0.95
		C372.362,303.664,369.538,300.836,364.556,300.836z" style="fill: rgb(75, 75, 75);"></path>
</g>
</svg>

 

ここで注目するのは、3行目のsvgタグです。

<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">

 

このタグに、width(横幅)height(縦幅)が指定されているので、こちらを任意のサイズに変更します。
今回は、縦横共に25pxにしたいので、下記のように修正しました。

<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 25px; height: 25px; opacity: 1;" xml:space="preserve">

あとは、この修正後のSVGファイルをimgタグで指定するだけで、先程指定した 25px × 25pxのサイズで無事に画像が表示されました。

 

もっとスタイリッシュな対処法があるのかもしれませんが…今回はこのような方法で対応しました。
アイコンのサイズが確定している場合には有効な方法ですね。
SVGファイルでお困りの際は、是非お試しください。

村上 著者:村上

【IoT】資生堂がその人の肌に合った美容液を提供するシステム「Optune(オプチューン)」を発表

気になるニュースがあったのでご紹介。

資生堂が開発したというシステムで、名前は「Optune(オプチューン)」と言います。
こちらの「Optune(オプチューン)」は、なんとその人の肌質やその時の気候、さらにはその時の気分にマッチした美容液を提供するしてくれるIoTマシンなのだとか。

利用方法としては、スマートフォンアプリで肌を撮影すると、その日の気候やユーザの気分・コンディションなどのデータともにクラウドで解析し、専用のマシン「Optune Zero(ベータ版の名称)」で最適な美容液や乳液を配合し、抽出してくれるのだそうです。
マシンには、ユーザーの肌に合わせて選ばれた3種類の美容液2種類の乳液を、5本のカートリッジでセットし、1000パターン以上の組み合わせから解析結果に基づいた最適な配合パターンの美容液が提供されるとのこと。
β版の発売が2018年春に予定されており、販売数や価格は現時点では未定です。

 

詳細についてはこちらのニュースサイトの記事もご覧ください。

資生堂「IoT化粧品」来春提供 その日の肌をチェック、配合をチェンジ
http://www.itmedia.co.jp/news/articles/1711/27/news127.html

資生堂、その時々の肌環境にマッチするIoTスキンケアシステム「Optune」発表
https://k-tai.watch.impress.co.jp/docs/news/1093527.html

 

資生堂のブランドマネージャー曰く「肌の状態は日々揺れ動いているため、最適だと思って買っていたものがいつの間にか最適ではなくなっている」とのこと。
そしてOptuneには、こうした肌の状態に最適化し(Optimize)、Tune(調律)するという意味が込められているとのことです。

 

こちらのシステムのターゲットは、肌や体質の変化を感じる3~40代女性とのことですが、現在20代の私も興味津々です。
お値段が張りそうですから、購入までには至らない可能性の方が高いですが、店頭などにお試しがあったら是非体験してみたいですね。