Adobe ColdFusion2016
最新機能のご紹介

2016.3

Adobe ColdFusion 2016とは？とは コードネーム：
コ ドネ ム： Raijin（雷神） 2014年4月30日にリリ
2014年4月30日にリリースされた
スされた ColdFusion 11 に続くメジャーバージョンアップ
 International English版と日本語版が提供されている
 専用エディタのColdFusion
専用 デ タのC ldF i
B
Builder
ild 2016 も同時リリースも同時リリ ス ColdFusion 2016のポイント‐CLI‐セキュリティ・コード・アナライザ‐PDF機能強化‐CFML言語強化‐APIAPI Manager、他
2

CLI（コマンドラインインターフェイス）

3

CLI

コマンドライン実行の実装
ColdFusionサーバーを起動することなく、cfmページをコマン
サ
起動すなく、ドライン（バッチ）で実行することが可能
 cf.batcf bat / cfcf.shsh‐CLIからcfmの実行例 レポート、ログ、アーカイブなどのファイル操作
 モニタリングやデバッグを目的としたデータベース処理
モニタリングやデバ グを目的としたデ タベ ス処理
 エラーログやスレッドダンプを担当者にメール送付‐cfmスクリプトを実行する際に
 cfmファイルへのパスは、絶対パスでも相対パスでも指定可能
 バッチのパラメーターは下記の方法で習得が可能‐cli.getArgs() ‒ 全てのパラメータを取得‐cli.getNamedArgs() ‒ 名前が付けられた引数一覧を取得‐cli.getUnnamedArgs() ‒ 名前が付けられていない引数一覧を配列で取得‐cli.getArg(int index) ‒ 引数の値をインデックスで取得‐cli.getNamedArg(StringliNdA (S iargName)N) ‒ 引数の値を名前で取得
4

CLI

実行例
例

‐cd C:¥ColdFusion2016¥cfusion¥bin‐cf.bat C:¥cli¥cli1.cfm samuraiz 20 foo=bar
cli1.cfm<cfoutput># li i L ( li#cli.writeLn(cli.getArg(1)A (1) & "さん、こんにちわ")#"さん こんにちわ")##cli.writeLn(cli.getNamedArg("foo"))##cli.writeLn(ArrayToList(cli.getArgs()))##cli writeLn(ArrayToList(cli getUnnamedArgs()))##cli.writeLn(ArrayToList(cli.getUnnamedArgs()))#</cfoutput>
 結果

samuraizさん、こんにちわ
barsamuraiz,20,foo=bar
samuraiz,20205

CLI

その他 設定等
その他、設定等
 CLIで実行する.cfmのコンパイル済みのファイルの格納場所と実行すイル済ァイル 格納場所

ログディレクトリは変更が可能（デフォルトは temp）
 cf.bat cliscript.cfm ‒outputdir=c:¥cfclasses ‒logdir=c:¥logs

 Application.cfc をサポート‐onApplicationStart(),onApplicationStop(),onError()のみサポート session や request メソッドはCLI呼び出しではサポートされない‐Application データソース
 http://blogs.coldfusion.com/post.cfm/application-datasources-inhttp://blogs.coldfusion.com/post.cfm/application datasources incoldfusion

 サポ
サポートされる変数スコープ
トされる変数スコ プ‐Application, Argument, Request, This, CLI Session変数やClient変数はサポートされない

6

CLI

コマンドラインからの読み込み・出力
 コマンドラインでのReading/Writing
ドライgg‐標準入力（stdin）、標準出力（stdout）、標準エラー出力（stderr）をサポート: cli.read()cli read() - 標準入力から入力（標準入力から入力（一行）を読み取り行）を読み取り
 cli.writeln(message) - message を標準出力へ
 cli.writeError(errorMessage) ‒ errorMessageを標準エラーへ‐例
例
 cf.bat C:¥cli¥cli2.cfm 2>> c:¥cli¥logs¥err.log

 その他コマンドラインでサポートされる機能:
その他コマンドラインでサポ トされる機能‐Mail‐Webservice
Webservice
 その他関数‐cli.exit(exitCode)liit( itC d ) - 指定した終了コードでコマンドプロンプトに戻る
指定した終了コ ドでコマンドプロンプトに戻る
7

CLI

コマンドラインでサポ トされない機能
コマンドラインでサポートされない機能
 以下
以下の機能はサポートされない
機能 サポ トな‐チャート作成‐スケジュールタスク‐PDF
PDF 機能‐ドキュメント‐REST‐Solr‐Flex 統合‐DotNet 統合‐WebSocket‐Image 関数‐API Manager

8セキュリティ・コード・アナライザ(E t(EnterpriseiEditi
Editionのみ)のみ)

9セキュリティ・コード・アナライザ

セキュリティコ ドアナライザについて
セキュリティコードアナライザについて
コ
コードをチェックするアナラ
ドをチェックするアナラチェックが可能な脆弱性
チックが可能な脆弱性

イザがCF2016 Enterpriseに付属‐SQLインジェクション‐XSS攻撃‐PDF
PDF XSS攻撃‐CSRF攻撃‐Cookiesチェック‐CFLocationチェック‐Passwords‐File
File uploadチェック‐GetとPost‐Fileインジェクション

‐開発プロファイル
開発プ フ イル ColdFusion Builder上でセキュリティアナライザ を実キュリティアナライザーを実行すると、CF2016側でファイルのコードチェックを行い、結果をB ild の画面に表示結果をBuilderの画面に表示

10

セキュリティ・コード・アナライザ

アナライザ機能の実行例

PDF機能強化12

PDF機能強化

サニタイズ
 PDFファイルの公開時などに、誤ってPDFファイルに機密情報が含まれないよう、メタ情報など情報を除去‐サニタイズ（除去）される情報
 メタデータ、添付ファイル、スクリプト、検索インデックス、保存された
メタデ タ 添付フ イル スクリプト 検索インデ クス 保存された

フォームデータ、レビュー・コメント、重なった状態のテキストや画像、参照されていないデータ、リンク、アクション・JavaScript、重なったオブジェクト<cfpdf action="sanitize" source="C:¥font1.pdf"
destinaton="font1
destinaton
font1̲sanitaize.pdf
sanitaize pdf" overwrite
overwrite="true">
true >‐destination属性の代わりにname属性でメモリ内に読み込むことも可

13

PDF機能強化

コメントのエクスポ ト/インポ ト
コメントのエクスポート/インポート PDF内のコメントをXFDFファイルにエクスポート/XFDFファ
内メ ト
ァイル
ク ポ ト
ァ

イルをPDFにインポート‐Export comment<cfpdf action="export" type="comment" source="c:¥source.pdf"
exportto="c:¥destination.xfdf"></cfpdf>‐Import comment<cfpdf action="import" type="comment" source="c:¥source.pdf"
importfrom="c:¥import.xfdf"
destination="c:¥destination.pdf"></cfpdf>

14

PDF機能強化

メタデ タのエクスポ ト/インポ ト
メタデータのエクスポート/インポート Acrobat 5以降のPDFファイルには、XML形式のメタデータ
以降
ァイル、
形式 メタデ タが含まれている‐メタデータに含まれるもの
 検索ユーティリティで使用できる文書、著者名、キーワード（内容、著作権情報）など
 xmpファイルをエクスポート、またはxmpファイルから情報をインポート‐Export metadata<cfpdf action="export" type="metadata" source="c:¥source.pdf"
exportto="c:¥destination.xmp"></cfpdf>‐Import metadata<cfpdf action="import" type="metadata" source="c:¥source.pdf"
importfrom="c:¥import.xmp"
destination="c:¥destination.pdf"></cfpdf>

15

PDF機能強化

ア カイブの強化
アーカイブの強化
PDF/Aは、電子文書の長期保存のためのPDF形式のISO標準化、電子文書 長期保存
形式標準化
バージョン。遠い将来もこのファイルを読み込むことができるための仕様
 PDF変換時に、指定された標準に照らしてチェック
PDF変換時に 指定された標準に照らしてチク‐PDFとは異なり、PDF/Aは長期保存には不向きな（フォント埋め込みではなく）フォントリンクなどの機能を禁止‐ColdFusion 11はPDF/A-1bをサポート。2016はPDF/A-2b や 3bにも対応<cfpdf action="archive" source="C:¥Hello World.pdf"
name="Myvar" overwrite="true" standard="2b"/>16

PDF機能強化

ファイルの添付PDFファイルにPDFや他の種類のファイルを添付可能
ァイル
や他 種類ァイル 添付可能

<cfpdf action="addAttachments" source="C:¥cf̲file3.pdf"
destination="#ExpandPath('out/添付
destination=#ExpandPath( out/添付.pdfpdf')#")# overwrite=
overwrite="yes">
yes ><cfpdfparam source="C:¥file1.txt" filename="file1.txt"
description="descriptive text" encoding="UTF-8" />< f df<cfpdfparamsource="C:¥file2.txt""C ¥fil 2 t t" filfilename="file2.txt""fil 2 t t"
description="descriptive text" encoding="UTF-8" /></cfpdf>‐destination属性の代わりにname属性でメモリ内に読み込むことも可
destination属性の代わりにname属性でメモリ内に読み込むことも可

17

PDF機能強化

スタンプを追加
事前 定義
事前に定義されたアイコンリストから選択したスタンプをPDFに
イ
リ ト
選択タ
適用できる
<cfpdf action="addStamp" source="#sourcefile#"
destination="#destinationfile#"
destination=#destinationfile# ><cfpdfparam pages="2" coordinates="397,532,519,564"
iconname="Approved" note="stamp1"></cfpdf>‐アイコンリスト
Approved,Ad EExperimental,il N
NotApproved,
Ad A
AsIs,
I E
Expiredi d,NotForPublicRelease, Confidential, Final, Sold, Departmental,ForComment, TopSecret, Draft, ForPublicRelease.

18

PDF機能強化

指定範囲を墨消し
指定した範囲の指定
範囲 PDFの画像またはテキストを墨消しする
画像
テキ ト 墨消 す<cfpdf action="redact" source="#sourcefile#"d ti ti
destination="#destinationfile#""#d ti ti fil #" overwrite="true">it "t"><cfpdfparam pages="1-2" coordinates="0,0,100,100"></cfpdf>

19

CFML言語強化

20

CFML言語強化

セ フナビゲ ション演算子(? )セーフナビゲーション演算子(?.)
構造体のメンバやオブジェクトのプロパティへアクセスする前に構造体
メやクト
ティ
クす 前
存在確認しないと見つからないエラー
これまで‐<cfif IsDefined("stTemp.test")><cfoutput>#stTemp.test#</cfoutput><cfelse>stTemp.testは存在しません。
Tは存在しません</cfif>これから‐<cfoutput>#stTemp?.test#</cfoutput>
 別の例‐<cfoutput>#employee?.name?.firstname?.trim()#</cfoutput>
cfoutput #employee?.name?.firstname?.trim()# /cfoutput
21

CFML言語強化

構造体メンバ の追加順序の保持
構造体メンバーの追加順序の保持 StructNew 関数に引数が追加
関数 引数 追加

‐Ordered（追加した順にメンバーを管理）<cfset str = StructNew("Ordered")><cfset val=StructInsert(departments,val StructInsert(departments, "John",John , "Sales")>
Sales )>
<cfset val=StructInsert(departments, "Tom", "Finance")><cfset val=StructInsert(departments, "Mike", "Education")><cfoutput><cfloop collection=#departments# item="person">#person# #Departments[person]#</cfloop></cfoutput>‐結果
結果
John Sales
Tom Finance
Mik EdMikeEducation
ti22

CFML言語強化

Replace関数の強化
 変更する文字に対する処理を強化
変更す 文字 対す 処理 強化‐<cfoutput>#replace("The quick brown fox jumped over the lazy
cow. , ow ,callBackFn)#
cow.","ow",callBackFn)#</cfoutput>p><cffunction name="callBackFn" access="public"<cfargument name="regExp"><cfargument name="position"><cfargument name="original"><cfset retString = regExp.reverse()&"aze"><cfreturn retString></cffunction>

23

その他

その他 タグ・関数
その他、タグ・関数
 ArrayFindNoCase(array,y(y, object)j)‐ArrayFindの大文字小文字を区別しない関数。
 ReplaceListNoCase
R l
Li tN C

‐ReplaceListの大文字小文字を区別しない関数。
 cfloop item属性‐リスト、ファイル、または配列に対するループに対して、index のみのサポ トは動作として適切ではなか たため itサポートは動作として適切ではなかったため、item
でも indexi dと同等に指定が可能となった item, index 両方を指定…itemは要素（値）を保持、indexはインデックスを保持
 itemのみ指定…itemは要素（値）を保持
 indexのみ指定…indexが要素（値）を保持（下位互換性のため）

24

ＡＰＩマネージャー(E t(EnterpriseiEditi
Editionのみ)のみ)

25

API マネージャー

APIマネ ジャAPIマネージャー
 ColdFusionとは別のサービスで実行され、ColdFusion
別 サ
実行、のColdFusion の (REST) API とのシームレスな連携が可能‐CFベースで組んだバックエンドシステムの機能を公開する API の作成を支援
 API マネージャーに含まれる機能‐アクセス制御…特定 API の使用がロールに基づいて実行されるよう制限‐計測・分析…メソッドやユーザーのAPI の使用状況を計測‐ポータル…API公開側が、利用者向けにカスタムワークフローを提供
ポータル…API公開側が 利用者向けにカスタムワークフローを提供

26

API マネージャー

ColdFusionとAPIマネ ジャ の統合
ColdFusionとAPIマネージャーの統合

27

API マネージャー

API作成

28

API マネージャー

APIカタログ29

API マネージャー

デ タ分析
データ分析

API マネージャー

Swagger ドキュメント生成
 Swagger
gg‐RESTful APIの説明や文書化するために使用されている
プロジェクトの仕様
 ColdFusion 2016では、REST CFCから自動的にSwaggerドキュメントを作成可能。
 ColdFusionでサポートされているSwaggerのバー
ジ ンは1 2
ジョンは1.2

31

その他、変更、追加等( 部 Enterprise(一部E ti
Editi
Editionのみ)のみ)

32

その他

セッション変数を外部 (Redis)に保存
 Enterprisep
Edition のみ

33

その他

配列の参照渡し 既存仕様では配列のコピーは変数の値自体を渡す
既存仕様
配列
変数 値自体 渡す‐単純変数、配列 … 値によるデータへのアクセス‐構造体、クエリオブジェクト … 参照によるデータへのアクセス
 新しいアプリケーション設定で配列の参照渡しが可能‐passArrayByReference
passArrayByReference = True / False
passArrayByReference=Trueの場合、UDFの引数として渡した際、それは参照によって渡されます。

34

その他

searchImplicitScopes スコープを使用しない変数の参照
使用 な 変数 参照‐<cfoutput>#hoge#</cfoutput>
 新しいアプリケーション設定で、function,新しいアプリケ シ ン設定で fti
llocalスコープ,lスコ プ

ローカル変数以外の変数も暗黙的に参照するかを設定‐searchImplicitScopes=
searchImplicitScopes True / False‐searchImplicitScopes に False を指定すると、下記のコードがエラーになる<cfset Url.hoge=1><cfoutput>#hoge#</cfoutput>

35

その他

パフォ マンス改善
パフォーマンス改善 ColdFusion 2016では、一部の処理に対するパフォーマンス、 部 処理 対す
ォの改善を実施‐新たに追加された設定による効果
新たに追加された設定による効果
 配列の参照渡し、searchImplicitScopes、配列の非同期設定など‐既存処理を変更したことによる効果
 クエリ、File・リスト関数、空白制御、ループ処理、など(参考)
http://wwwimages.adobe.com/content/dam/acom/en/products/co
ldfusion/pdfs/cf2016/CF2016̲Performance.pdfp̲p※既存のアプリケーションを2016でテストする際は、上記に関連する処理でエラー等の問題が発生しないかのチェックを推奨
ラ等の問題が発生しないかのチェックを推奨
36

その他

CFIDE内からscriptsを分離
 cfform.js
j や AJAX用
用 JavaScript、その他スクリ
p 、そ 他 クリ

プトを 従来の /CFIDE/ から分離して cf̲scriptsフォルダへ移動‐CFIDEフォルダ内（Administrator等のサブフォルダ）のCFIDEフォルダ内（Ad i i t t 等のサブフォルダ）のセキュリティを考慮してアクセス制限を掛ける事が外部サイ
トに公開の際に強く推奨されるため

37

その他

Administratorへのアクセスを制限
 ColdFusion Administrator へのアクセスを制限
ク
制限‐外部Webサーバー（IIS, Apache等）とのコネクタを設定した際、従来のCFIDEへの仮想ディレクトリ設定をColdFusion 2016では行わない

CF2016設定時

CF 11設定時

 インストール時にIISやApacheを選択しても、別途内部Webサーバーも有効化され、Administratorへのアクセスに利用される
 外部Webサーバーとのコネクタの設定でも/CFIDE/のアクセスが制限される
38

その他

サポ トプラットフォ ムの主な変更点
サポートプラットフォームの主な変更点
 OS, Webサーバー‐サポートバージョンの変更や廃止（Windows 2003,OpenSuse,他）‐Apache は 2.4.X のみサポート
 J2EE (Enterpriseのみ)‐WebSphereは未サポート。その他 サポートバージョンの変更等
 WebSphere 8.5 は IBM JDK 1.7のため。WebSphere 9 リリース後、W bS hWebSphereをサポ ト予定をサポート予定

 DB‐MicrosoftMicrosoft Accessは未サポ
Accessは未サポート
ト‐他のDBもサポートバージョンが変更されているものあり
 Java‐Oracle Java 8のみサポート
 Java 7でないと動かないものは、2016ではNGとなる‐ODBC Socket（機能としてまだ残ってはいるが、日本語はJava8では×）

https://helpx.adobe.com/pdf/coldfusion2016-support-matrix.pdf
39

その他

動作の変更（現時点） cfhtmltopdfの動作の変更‐<cfhtmltopdf> 〜 </cfhtmltopdf>内に挟み込んだ HTML を、これまではShift-JISに変換した後 PDF化。ColdFusion 2016 では UTF-8に変換した後 PDF化
‐http://cfassociates.samuraiz.co.jp/index.cfm/faq/coldfusion20
16/cf2016-cfhtmltopdf/
 cfprocparamの動作の変更‐MXより dbvarname属性は無視されるようになったが、11から復活
 古いdbvarname属性がそのまま残っているとエラーが発生する可能性‐11では無視するためのJVM引数があったが 2016では削除（事前予告済）-Dcoldfusion.ignoredbvarname=true‐古いdbvarname属性が残っている場合、対応が必要な場合がある
古いdb属性が残 ている場合 対応が必要な場合がある‐（参考）http://blogs.coldfusion.com/post.cfm/coldfusion-11and-dbvarname-attribute

40

その他

廃止・非推奨の機能（ 部）廃止・非推奨の機能（一部） ライブラリ側の開発終了 → 非推奨・サポート外‐YUI tool kit (cftree, cfcalendar, cfautosuggest, cfmenu)‐Portlets, Report Builder, cfsprydataset
 Flash ベースのライブラリ → 非推奨、または、サポート外‐Event gateway(Flash Media server), Server Manager, ServerMonitor, cfchart(format flash), Flash forms, cffileupload(Flash),cfmediaplayer

 ColdFusion 11で非推奨となったもの → 非推奨・サポート外‐HTMLEditFormat
HTMLEditFormat を除いたすべて
https://helpx.adobe.com/coldfusion/deprecated-features.html

41

お問い合わせ先

株式会社サムライズ
アドビソフトウェア事業部
ドビトウ
事業部 ColdFusion ビジネスユニット
ビジネ
トE-mail: adobe̲software@samuraiz.co.jp
http://www.samuraiz.co.jp/※サムライズのホームページでColdFusion情報を公開中
http://www.samuraiz.co.jp/adobeproduct/coldfusion/index.html(C ldF i カフェテリア)(ColdFusionカフ テリア) http://forum.samuraiz.co.jp
htt //fij(ColdFusion Associate) http://cfassociates.samuraiz.co.jp
ColdFusion は、Adobe Systems Incorporated（アドビ システムズ社）の米国ならびに他の国における登録商標または商標です。
その他、記載されている会社名や製品ブランド名は、各社の商標または登録商標です。

42